dmencu 3.2.4 → 3.2.6
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/dist/client/client/client.js +2 -2
- package/dist/client/unlogged/bypass-formulario.d.ts +5 -0
- package/dist/client/unlogged/bypass-formulario.js +58 -1
- package/dist/client/unlogged/redux-formulario.d.ts +44 -2
- package/dist/client/unlogged/redux-formulario.js +44 -4
- package/dist/client/unlogged/render-formulario.d.ts +6 -0
- package/dist/client/unlogged/render-formulario.js +205 -14
- package/dist/client/unlogged/render-formulario.tsx +252 -18
- package/dist/client/unlogged/render-general.d.ts +8 -0
- package/dist/client/unlogged/render-general.js +29 -2
- package/dist/client/unlogged/render-general.tsx +30 -0
- package/dist/client/unlogged/tipos.d.ts +7 -2
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/server/app-dmencu.d.ts +84 -525
- package/dist/server/server/app-dmencu.js +2 -2
- package/dist/server/server/procedures-dmencu.js +6 -4
- package/dist/server/unlogged/tipos.d.ts +7 -2
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +5 -0
- package/dist/unlogged/unlogged/bypass-formulario.js +58 -1
- package/dist/unlogged/unlogged/redux-formulario.d.ts +44 -2
- package/dist/unlogged/unlogged/redux-formulario.js +44 -4
- package/dist/unlogged/unlogged/render-formulario.d.ts +6 -0
- package/dist/unlogged/unlogged/render-formulario.js +205 -14
- package/dist/unlogged/unlogged/render-formulario.tsx +252 -18
- package/dist/unlogged/unlogged/render-general.d.ts +8 -0
- package/dist/unlogged/unlogged/render-general.js +29 -2
- package/dist/unlogged/unlogged/render-general.tsx +30 -0
- package/dist/unlogged/unlogged/tipos.d.ts +7 -2
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/package.json +3 -3
|
@@ -29,7 +29,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
29
29
|
})(function (require, exports) {
|
|
30
30
|
"use strict";
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.setLibreDespliegue = exports.setHojaDeRutaDespliegue = exports.HojaDeRutaDespliegue = exports.handleLogout = exports.setDesplegarCarga = exports.DesplegarCarga = exports.setDesplegarLineaResumenUAPrincipal = exports.DesplegarLineaResumenUAPrincipal = exports.resumidores = exports.listaEstadosCarga = exports.Button = void 0;
|
|
32
|
+
exports.setLibreDespliegue = exports.setHojaDeRutaDespliegue = exports.HojaDeRutaDespliegue = exports.handleLogout = exports.setDesplegarCarga = exports.DesplegarCarga = exports.setDesplegarLineaResumenUAPrincipal = exports.DesplegarLineaResumenUAPrincipal = exports.resumidores = exports.listaEstadosCarga = exports.Button = exports.BreakeableText = void 0;
|
|
33
33
|
exports.getBFVarNames = getBFVarNames;
|
|
34
34
|
exports.FastSetup = FastSetup;
|
|
35
35
|
exports.Atributo = Atributo;
|
|
@@ -80,13 +80,158 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
80
80
|
if (typeof text != "string")
|
|
81
81
|
return null;
|
|
82
82
|
text = text.replace(/\//g, "/\u2063").replace(/\/\u2063(\w)\b/g, '/$1');
|
|
83
|
-
text = text.replace(/___*/g, (todo) => `[${todo}]`).replace(
|
|
83
|
+
text = text.replace(/___*/g, (todo) => `[${todo}]`).replace(/\@#?[\w-]+@/g, (todo) => `[${todo}]`);
|
|
84
84
|
if (!diccionario || true)
|
|
85
85
|
return text;
|
|
86
86
|
/*
|
|
87
87
|
return <span>{partes.map((parte:string, i:number) => <span style={i%2==1?{textDecoration:"underline"}:{}}> {parte+" "} </span>)}</span>
|
|
88
88
|
*/
|
|
89
89
|
}
|
|
90
|
+
exports.BreakeableText = React.memo(function BreakeableText(props) {
|
|
91
|
+
const { text, className, style } = props;
|
|
92
|
+
// Comodines clásicos presentes en el texto (ej: @resps1@ -> "resps1")
|
|
93
|
+
const comodinesInteres = (0, react_1.useMemo)(() => {
|
|
94
|
+
if (typeof text !== "string" || !text.includes('@'))
|
|
95
|
+
return [];
|
|
96
|
+
const matches = text.match(/@([a-zA-Z0-9_-]+)@/g);
|
|
97
|
+
if (!matches)
|
|
98
|
+
return [];
|
|
99
|
+
const ids = [];
|
|
100
|
+
for (let i = 0; i < matches.length; i++) {
|
|
101
|
+
const m = matches[i];
|
|
102
|
+
if (!m.startsWith('@#')) {
|
|
103
|
+
const id = m.slice(1, -1);
|
|
104
|
+
if (ids.indexOf(id) === -1) {
|
|
105
|
+
ids.push(id);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return ids;
|
|
110
|
+
}, [text]);
|
|
111
|
+
// Selector granular con shallowEqual: sólo suscribe y re-evalúa si cambian SUS comodines
|
|
112
|
+
const comodinesValores = (0, react_redux_1.useSelector)((state) => {
|
|
113
|
+
var _a, _b, _c;
|
|
114
|
+
if (comodinesInteres.length === 0)
|
|
115
|
+
return null;
|
|
116
|
+
const storeComodines = ((_a = state === null || state === void 0 ? void 0 : state.opciones) === null || _a === void 0 ? void 0 : _a.comodines) || redux_formulario_1.comodinesIniciales;
|
|
117
|
+
const resultado = {};
|
|
118
|
+
for (let i = 0; i < comodinesInteres.length; i++) {
|
|
119
|
+
const id = comodinesInteres[i];
|
|
120
|
+
resultado[id] = (_c = (_b = storeComodines[id]) !== null && _b !== void 0 ? _b : redux_formulario_1.comodinesIniciales[id]) !== null && _c !== void 0 ? _c : '';
|
|
121
|
+
}
|
|
122
|
+
return resultado;
|
|
123
|
+
}, react_redux_1.shallowEqual);
|
|
124
|
+
const reduxForPk = (0, react_redux_1.useSelector)((state) => { var _a; return (_a = state === null || state === void 0 ? void 0 : state.opciones) === null || _a === void 0 ? void 0 : _a.forPk; });
|
|
125
|
+
const forPk = props.forPk || reduxForPk;
|
|
126
|
+
// Variable de estado que se actualiza cada vez que llega un cambio de una variable de interés
|
|
127
|
+
const [valoresVariables, setValoresVariables] = (0, react_1.useState)({});
|
|
128
|
+
// Variables de interés: el nombre de variable indicado después de # dentro de los arrobas (ej: @#edad@ -> "edad")
|
|
129
|
+
const variablesInteres = (0, react_1.useMemo)(() => {
|
|
130
|
+
if (typeof text !== "string")
|
|
131
|
+
return [];
|
|
132
|
+
const matches = text.match(/@#([^@]+)@/g);
|
|
133
|
+
if (!matches)
|
|
134
|
+
return [];
|
|
135
|
+
const vars = [];
|
|
136
|
+
for (let i = 0; i < matches.length; i++) {
|
|
137
|
+
const m = matches[i];
|
|
138
|
+
const match = m.match(/^@#([\w-]+)@$/);
|
|
139
|
+
if (match) {
|
|
140
|
+
const varName = match[1];
|
|
141
|
+
if (vars.indexOf(varName) === -1) {
|
|
142
|
+
vars.push(varName);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return vars;
|
|
147
|
+
}, [text]);
|
|
148
|
+
(0, react_1.useEffect)(() => {
|
|
149
|
+
if (!text || variablesInteres.length === 0)
|
|
150
|
+
return;
|
|
151
|
+
const listener = (varModificada, nuevoValor, _forPk, respuestasAumentadas) => {
|
|
152
|
+
let huboCambio = false;
|
|
153
|
+
const nuevosValores = {};
|
|
154
|
+
if (respuestasAumentadas) {
|
|
155
|
+
for (let i = 0; i < variablesInteres.length; i++) {
|
|
156
|
+
const varName = variablesInteres[i];
|
|
157
|
+
if (varName in respuestasAumentadas) {
|
|
158
|
+
const val = respuestasAumentadas[varName];
|
|
159
|
+
nuevosValores[varName] = (val != null && val !== '') ? String(val) : '........';
|
|
160
|
+
huboCambio = true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (!huboCambio && variablesInteres.indexOf(varModificada) !== -1) {
|
|
165
|
+
nuevosValores[varModificada] = (nuevoValor != null && nuevoValor !== '') ? String(nuevoValor) : '........';
|
|
166
|
+
huboCambio = true;
|
|
167
|
+
}
|
|
168
|
+
if (huboCambio) {
|
|
169
|
+
setValoresVariables(prev => {
|
|
170
|
+
const next = {};
|
|
171
|
+
for (const k in prev) {
|
|
172
|
+
next[k] = prev[k];
|
|
173
|
+
}
|
|
174
|
+
for (const k in nuevosValores) {
|
|
175
|
+
next[k] = nuevosValores[k];
|
|
176
|
+
}
|
|
177
|
+
return next;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
const desuscribir = (0, bypass_formulario_1.suscribirCambioVariable)(listener, variablesInteres);
|
|
182
|
+
return () => {
|
|
183
|
+
desuscribir();
|
|
184
|
+
};
|
|
185
|
+
}, [text, variablesInteres]);
|
|
186
|
+
if (typeof text !== "string")
|
|
187
|
+
return null;
|
|
188
|
+
let procesado = text.replace(/\//g, "/\u2063").replace(/\/\u2063(\w)\b/g, '/$1');
|
|
189
|
+
procesado = procesado.replace(/___*/g, (todo) => `[${todo}]`);
|
|
190
|
+
const partes = procesado.split(/(@#?[\w-]+@)/g);
|
|
191
|
+
const contenido = partes.map((parte, index) => {
|
|
192
|
+
const match = parte.match(/^@(#?)([\w-]+)@$/);
|
|
193
|
+
if (match) {
|
|
194
|
+
const tieneHash = match[1] === '#';
|
|
195
|
+
const id = match[2];
|
|
196
|
+
let valor = undefined;
|
|
197
|
+
// 1. Si es variable con #, buscar el valor de la variable indicada después de # en el estado del listener (actualizado desde respuestasAumentadas)
|
|
198
|
+
if (tieneHash) {
|
|
199
|
+
if (valoresVariables[id] !== undefined) {
|
|
200
|
+
valor = valoresVariables[id];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// 2. Si tiene # y aún no está definido, buscar directamente en respuestasAumentadas
|
|
204
|
+
if (valor === undefined && tieneHash && forPk) {
|
|
205
|
+
try {
|
|
206
|
+
const { respuestasAumentadas } = (0, bypass_formulario_1.respuestasForPk)(forPk, true);
|
|
207
|
+
const val = respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas[id];
|
|
208
|
+
if (val != null && val !== '') {
|
|
209
|
+
valor = String(val);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (_a) {
|
|
213
|
+
// Ignorar error si no se pudo acceder a respuestas
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// 3. Buscar en comodines (Redux granular o comodinesIniciales)
|
|
217
|
+
if (valor === undefined) {
|
|
218
|
+
valor = comodinesValores ? comodinesValores[id] : redux_formulario_1.comodinesIniciales[id];
|
|
219
|
+
}
|
|
220
|
+
if (valor !== undefined && valor !== null && valor !== '') {
|
|
221
|
+
return valor;
|
|
222
|
+
}
|
|
223
|
+
if (tieneHash && (valor === '' || valor === null)) {
|
|
224
|
+
return '........';
|
|
225
|
+
}
|
|
226
|
+
if (valor !== undefined && valor !== null) {
|
|
227
|
+
return valor;
|
|
228
|
+
}
|
|
229
|
+
return (React.createElement("span", { key: index, style: { color: 'red' } }, `No se encontró ${parte}`));
|
|
230
|
+
}
|
|
231
|
+
return parte;
|
|
232
|
+
});
|
|
233
|
+
return React.createElement("span", { className: className, style: style }, contenido);
|
|
234
|
+
});
|
|
90
235
|
function getBFVarNames(salto) {
|
|
91
236
|
const armoNomSalto = (salto === null || salto === void 0 ? void 0 : salto.substring(0, 2)) == 'F:' ? salto.slice(2) : salto;
|
|
92
237
|
return {
|
|
@@ -119,7 +264,14 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
119
264
|
const styleToCss = (style) => {
|
|
120
265
|
if (typeof style === 'string' || style == null)
|
|
121
266
|
return style;
|
|
122
|
-
|
|
267
|
+
const res = [];
|
|
268
|
+
for (const k in style) {
|
|
269
|
+
const v = style[k];
|
|
270
|
+
if (v != null) {
|
|
271
|
+
res.push(`${k.replace(/[A-Z]/g, (m) => "-" + m.toLowerCase())}:${v}`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return res.join(';');
|
|
123
275
|
};
|
|
124
276
|
const Button2 = (_a) => {
|
|
125
277
|
var { variant, onClick, disabled, children, className, color, size, style } = _a, other = __rest(_a, ["variant", "onClick", "disabled", "children", "className", "color", "size", "style"]);
|
|
@@ -246,9 +398,11 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
246
398
|
React.createElement(Grid, { container: true, wrap: "nowrap" },
|
|
247
399
|
React.createElement(Grid, { className: "id" }, casillero.ver_id || casillero.casillero),
|
|
248
400
|
React.createElement(Grid, { className: "opcion-texto" },
|
|
249
|
-
React.createElement(Typography, { "debe-leer": casillero.leer ? 'SI' : casillero.leer === false ? 'NO' : props.leer ? 'SI' : 'NO' },
|
|
401
|
+
React.createElement(Typography, { "debe-leer": casillero.leer ? 'SI' : casillero.leer === false ? 'NO' : props.leer ? 'SI' : 'NO' },
|
|
402
|
+
React.createElement(exports.BreakeableText, { text: casillero.nombre })),
|
|
250
403
|
casillero.aclaracion ?
|
|
251
|
-
React.createElement(Typography, { className: 'aclaracion' },
|
|
404
|
+
React.createElement(Typography, { className: 'aclaracion' },
|
|
405
|
+
React.createElement(exports.BreakeableText, { text: casillero.aclaracion }))
|
|
252
406
|
: null))),
|
|
253
407
|
React.createElement(SaltoDespliegue, { casillero: casillero }));
|
|
254
408
|
}
|
|
@@ -366,7 +520,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
366
520
|
} }, "NS/NC")))((_b = casillero.valor_ns_nc) !== null && _b !== void 0 ? _b : -9) : null)),
|
|
367
521
|
React.createElement("div", { className: "nombre-div" },
|
|
368
522
|
React.createElement("div", { className: "nombre" },
|
|
369
|
-
|
|
523
|
+
React.createElement(exports.BreakeableText, { text: casillero.nombre }),
|
|
370
524
|
((_c = casillero.especial) === null || _c === void 0 ? void 0 : _c.gps) ?
|
|
371
525
|
React.createElement("span", null,
|
|
372
526
|
React.createElement(exports.Button, { color: "primary", variant: "outlined", style: { marginLeft: '10px' }, onClick: (_event) => {
|
|
@@ -399,7 +553,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
399
553
|
React.createElement("div", { className: "aclaracion" }, casillero.salto && casillero.tipoc == 'FILTRO' ?
|
|
400
554
|
React.createElement(SaltoDespliegue, { casillero: casillero, prefijo: breakeableText(casillero.aclaracion) })
|
|
401
555
|
:
|
|
402
|
-
|
|
556
|
+
React.createElement(exports.BreakeableText, { text: casillero.aclaracion }))
|
|
403
557
|
: null,
|
|
404
558
|
getLosMetadatos(casillero)));
|
|
405
559
|
}
|
|
@@ -532,8 +686,6 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
532
686
|
function PreguntaDespliegue(props) {
|
|
533
687
|
var _a, _b;
|
|
534
688
|
var { pregunta } = props;
|
|
535
|
-
const dispatch = (0, react_redux_1.useDispatch)();
|
|
536
|
-
var estado;
|
|
537
689
|
var id = `pregunta-${pregunta.id_casillero}`;
|
|
538
690
|
(0, bypass_formulario_2.registrarElemento)({
|
|
539
691
|
id,
|
|
@@ -1354,10 +1506,10 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1354
1506
|
}
|
|
1355
1507
|
function FormularioDespliegue(props) {
|
|
1356
1508
|
var _a;
|
|
1357
|
-
var forPk = props.forPk;
|
|
1358
|
-
var { formulario, modoDespliegue, opciones } = useSelectorVivienda(props.forPk);
|
|
1359
|
-
var soloLectura = (0, bypass_formulario_1.getDatosByPass)().soloLectura;
|
|
1360
1509
|
const dispatch = (0, react_redux_1.useDispatch)();
|
|
1510
|
+
const forPk = props.forPk;
|
|
1511
|
+
var { formulario, modoDespliegue, opciones } = useSelectorVivienda(forPk);
|
|
1512
|
+
var soloLectura = (0, bypass_formulario_1.getDatosByPass)().soloLectura;
|
|
1361
1513
|
var esVolver = opciones.pilaForPk.length > 0;
|
|
1362
1514
|
(0, react_1.useEffect)(() => {
|
|
1363
1515
|
var _a;
|
|
@@ -1377,12 +1529,13 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
1377
1529
|
> document.documentElement.scrollTop + window.innerHeight * 0.7 ? 'visible' : 'hidden');
|
|
1378
1530
|
}
|
|
1379
1531
|
};
|
|
1380
|
-
const idCaso = (_a = (0, like_ar_1.strict)(
|
|
1532
|
+
const idCaso = (_a = (0, like_ar_1.strict)(forPk).find((_, k) => {
|
|
1381
1533
|
return k != 'formulario';
|
|
1382
1534
|
})) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1383
1535
|
window.document.title = (0, bypass_formulario_2.getEstructura)().operativo + '- ' + idCaso;
|
|
1384
1536
|
window.addEventListener('scroll', controlScroll);
|
|
1385
1537
|
controlScroll();
|
|
1538
|
+
calcularComodines(forPk);
|
|
1386
1539
|
return () => {
|
|
1387
1540
|
window.removeEventListener('scroll', controlScroll);
|
|
1388
1541
|
};
|
|
@@ -2025,6 +2178,44 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
2025
2178
|
window.addEventListener('load', function () {
|
|
2026
2179
|
loadInstance();
|
|
2027
2180
|
});
|
|
2181
|
+
function calcularComodines(forPk) {
|
|
2182
|
+
var _a, _b, _c, _d, _e;
|
|
2183
|
+
const estructura = (0, bypass_formulario_2.getEstructura)();
|
|
2184
|
+
const infoHdr = (0, bypass_formulario_1.getDatosByPass)().informacionHdr[forPk[estructura.pkAgregadaUaPpal]];
|
|
2185
|
+
const semanaNumero = (_a = infoHdr === null || infoHdr === void 0 ? void 0 : infoHdr.tem) === null || _a === void 0 ? void 0 : _a.semana;
|
|
2186
|
+
const semanaObj = semanaNumero != null ? (_b = estructura.semanas) === null || _b === void 0 ? void 0 : _b[semanaNumero] : null;
|
|
2187
|
+
const { respuestasAumentadas } = (0, bypass_formulario_1.respuestasForPk)(forPk, true);
|
|
2188
|
+
const rangoFecha = (desde, hasta) => (desde && hasta) ? `${(0, render_general_1.fechaReferencia)(desde)} a ${(0, render_general_1.fechaReferencia)(hasta)}` : null;
|
|
2189
|
+
const semRef = rangoFecha(semanaObj === null || semanaObj === void 0 ? void 0 : semanaObj.semana_referencia_desde, semanaObj === null || semanaObj === void 0 ? void 0 : semanaObj.semana_referencia_hasta);
|
|
2190
|
+
const d30Ref = rangoFecha(semanaObj === null || semanaObj === void 0 ? void 0 : semanaObj.d30_referencia_desde, semanaObj === null || semanaObj === void 0 ? void 0 : semanaObj.d30_referencia_hasta);
|
|
2191
|
+
const personasArray = Array.isArray(respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['personas'])
|
|
2192
|
+
? respuestasAumentadas['personas'] : [];
|
|
2193
|
+
const buscarPersona = (num) => num != null ? personasArray.find((p, idx) => ((p === null || p === void 0 ? void 0 : p.persona) != null ? Number(p.persona) === Number(num) : (idx + 1) === Number(num))) : null;
|
|
2194
|
+
const textoParentesco = (p) => {
|
|
2195
|
+
var _a;
|
|
2196
|
+
const p4 = (_a = p === null || p === void 0 ? void 0 : p.p4) !== null && _a !== void 0 ? _a : p === null || p === void 0 ? void 0 : p.p4r;
|
|
2197
|
+
return p4 != null ? (0, render_general_1.obtenerTextoParentesco)(Number(p4), estructura.operativo) : null;
|
|
2198
|
+
};
|
|
2199
|
+
const esEntrea = (respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['entrea']) == 1;
|
|
2200
|
+
const nombrer = respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['nombrer'];
|
|
2201
|
+
const personaResp = esEntrea ? buscarPersona(respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['respond']) : null;
|
|
2202
|
+
const personaRespi = esEntrea ? buscarPersona(respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['cr_num_miembro']) : null;
|
|
2203
|
+
const jefe = esEntrea ? buscarPersona(1) : null;
|
|
2204
|
+
const parentResp = textoParentesco(personaResp);
|
|
2205
|
+
const parentRespi = textoParentesco(personaRespi);
|
|
2206
|
+
const totalH = (_c = respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['total_h']) !== null && _c !== void 0 ? _c : respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['total_h_sup'];
|
|
2207
|
+
const fRealiz = respuestasAumentadas === null || respuestasAumentadas === void 0 ? void 0 : respuestasAumentadas['f_realiz_o'];
|
|
2208
|
+
const comodinesCalculados = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, redux_formulario_1.comodinesIniciales), { canti_hogares: totalH != null ? String(totalH) : '........', frealiz: fRealiz != null ? String(fRealiz) : '........', resps1: (esEntrea && nombrer) ? String(nombrer) : '........', parents1: (esEntrea && parentResp) ? parentResp : '........', respi1: (esEntrea && (personaRespi === null || personaRespi === void 0 ? void 0 : personaRespi.nombre)) ? String(personaRespi.nombre) : '........', parenti1: (esEntrea && parentRespi) ? parentRespi : '........', njefe: (esEntrea && (jefe === null || jefe === void 0 ? void 0 : jefe.nombre)) ? String(jefe.nombre) : '........' }), (semRef && { SEM_REF: semRef })), (d30Ref && { D30_REF: d30Ref })), ((semanaObj === null || semanaObj === void 0 ? void 0 : semanaObj.mes_referencia) && { MES_REF: (0, render_general_1.mesReferencia)(semanaObj.mes_referencia) })), (semanaNumero != null && { SEM_NUM: String(semanaNumero) }));
|
|
2209
|
+
const store = (0, redux_formulario_1.getStoreFormulario)();
|
|
2210
|
+
if (!store)
|
|
2211
|
+
return;
|
|
2212
|
+
const actual = ((_e = (_d = store.getState()) === null || _d === void 0 ? void 0 : _d.opciones) === null || _e === void 0 ? void 0 : _e.comodines) || redux_formulario_1.comodinesIniciales;
|
|
2213
|
+
const cambio = Object.keys(comodinesCalculados).some((key) => actual[key] !== comodinesCalculados[key]);
|
|
2214
|
+
if (cambio) {
|
|
2215
|
+
store.dispatch(redux_formulario_1.dispatchers.CAMBIAR_COMODINES(comodinesCalculados));
|
|
2216
|
+
}
|
|
2217
|
+
}
|
|
2218
|
+
(0, bypass_formulario_1.setCalcularComodines)(calcularComodines);
|
|
2028
2219
|
//FIN CONTROL PESTAÑAS
|
|
2029
2220
|
function loadCSS(cssURL, id) {
|
|
2030
2221
|
return new Promise((resolve, reject) => {
|
|
@@ -2050,4 +2241,4 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
2050
2241
|
}
|
|
2051
2242
|
const BOOTSTRAP_5_1_3_SRC = 'css/bootstrap.min.css';
|
|
2052
2243
|
});
|
|
2053
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0hBLHNDQU9DO0lBeUpELDhCQTZCQztJQW9zREQsNEJBS0M7SUFpTUQsb0RBU0M7SUFFRCxvR0FPQztJQUVELG9DQWVDO0lBZUQsMENBcUJDO0lBRUQsZ0RBMEJDO0lBRUQsd0RBOEdDO0lBdUJELDBEQW9GQztJQVFELHdEQXlEQztJQUVELGdEQW9HQztJQUtELGtFQVdDO0lBa0NELGtDQUlDO0lBVUQsZ0NBY0M7SUFFRCw4QkFxQ0M7SUFFRCw4REFrQkM7SUFyeUZELCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMscURBUTBCO0lBQzFCLG1DQWdCaUI7SUFDakIsMkRBaUI0QjtJQUM1Qix5REFHNEI7SUFDNUIsaUNBQTRDO0lBQzVDLDZDQUF1RDtJQUN2RCxxQ0FBMkM7SUFDM0MsK0NBQXlEO0lBQ3pELDJDQUF3QztJQUV4Qyw0Q0FTdUI7SUFHdkIsMkRBYzRCO0lBRTVCLDJDQUEyQztJQUMzQyxtREFBc0Y7SUFFdEYsaUVBQWlFO0lBQ2pFLHdFQUF3RTtJQUN4RSxJQUFBLG9DQUFvQixFQUFDLFNBQWUsK0JBQStCOztZQUMvRCxJQUFJLFlBQVksR0FBRyxJQUFBLCtCQUFlLEdBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2RCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxJQUFHLFVBQVUsSUFBSSxLQUFLLEVBQUMsQ0FBQztnQkFDcEIsSUFBQSxpQ0FBYSxFQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQixJQUFBLGtDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FB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Q0FBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQge1xyXG4gICAgUmVuZGVyUHJpbmNpcGFsLFxyXG4gICAgYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8sXHJcbiAgICBJQ09OLFxyXG4gICAgc2Nyb2xsVG9Ub3AsXHJcbiAgICBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLFxyXG4gICAgdXNlT25saW5lU3RhdHVzLFxyXG4gICAgUmVuZGVyaXphZG9ySlNPTixcclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge1xyXG4gICAgQmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYXNpbGxlcm9CYXNlLCBDYXNvU3RhdGUsIENvbmp1bnRvUHJlZ3VudGFzLCBDb25zaXN0ZW5jaWEsXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQayxcclxuICAgIFByZWd1bnRhLCBQcmVndW50YUNvbk9wY2lvbmVzLCBQcmVndW50YVNpbXBsZSxcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBJZE9wZXJhdGl2bywgSWRFbmMsIExpYnJlLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5LCBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgUE1hdHJpeixcclxuICAgIE1vZG9ETSxcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sXHJcbiAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8sXHJcbiAgICBjYWxjdWxhckFjdHVhbEJGLFxyXG4gICAgY2FsY3VsYXJEaXNhYmxlZEJGLFxyXG4gICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYsXHJcbiAgICBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYSxcclxuICAgIGNyZWFyRW5jdWVzdGEsXHJcbiAgICBoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zLFxyXG4gICAgZ2V0RGF0b3NCeVBhc3MsXHJcbiAgICBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6LFxyXG4gICAgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSxcclxuICAgIGludGVudGFyQmFja3VwLFxyXG4gICAgcmVzcHVlc3Rhc0ZvclBrLFxyXG4gICAgc2V0Q2FsY3VsYXJWYXJpYWJsZXMsXHJcbiAgICBzZXREYXRvc0J5UGFzcyxcclxuICAgIHNldEVzdHJ1Y3R1cmFcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7XHJcbiAgICBjcmVhclN0b3JlRm9ybXVsYXJpbywgZGlzcGF0Y2hlcnMsXHJcbiAgICBnb3RvQ29uc2lzdGlyLFxyXG59IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyB1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7IHNsZWVwLCBjb2FsZXNjZSwgZGF0ZXRpbWUgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENoZWNrYm94LFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCxcclxuICAgIERpYWxvZ1RpdGxlLCBEaXZpZGVyLCBGYWIsXHJcbiAgICBJY29uLFxyXG4gICAgTGlzdEl0ZW1JY29uLFxyXG4gICAgTGlzdEl0ZW1UZXh0LFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgRXN0YWRvVmFyaWFibGUsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8sIHNldEF0dHJEaXN0aW50bywgc2V0VmFsb3JEaXN0aW50bywgZGlzcGF0Y2hCeVBhc3MsXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLFxyXG4gICAgZ2V0RXN0cnVjdHVyYSxcclxuICAgIGRlZk9wZXJhdGl2byxcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MsXHJcbiAgICBudW1iZXJPclN0cmluZ0luY0lmQXJyYXksXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQgeyBodG1sLCBIdG1sVGFnIH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0IHsgRm9ybVJlbmRlcmVyLCBnZXRGb3JtUmVuZGVyZXIsIHJlZ2lzdHJhckNhcmdhck1vdG9yIH0gZnJvbSBcIi4vcmVuZGVyLWNvbmZpZ1wiO1xyXG5cclxuLy8gUmVnaXN0cmEgbGEgaW1wbGVtZW50YWNpw7NuIGRlIGNhcmdhck1vdG9yIGFsIGNhcmdhciBlbCBtw7NkdWxvLlxyXG4vLyBFc3RvIGV2aXRhIGxhIGRlcGVuZGVuY2lhIGNpcmN1bGFyIHJlbmRlci1jb25maWcg4oaQIGJ5cGFzcy1mb3JtdWxhcmlvLlxyXG5yZWdpc3RyYXJDYXJnYXJNb3Rvcihhc3luYyBmdW5jdGlvbiBjYXJnYXJFc3RydWN0dXJhWURhdG9zRW5NZW1vcmlhKCkge1xyXG4gICAgdmFyIGZvcm1SZW5kZXJlciA9IGdldEZvcm1SZW5kZXJlcigpO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZGF0b3MgPSBhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCk7XHJcbiAgICBpZihlc3RydWN0dXJhICYmIGRhdG9zKXtcclxuICAgICAgICBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIHNldERhdG9zQnlQYXNzKGRhdG9zKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUxBWV9TQ1JPTExfMyA9IDUwO1xyXG5cclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGw7XHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6IHN0cmluZyB8IG51bGwsIGRpY2Npb25hcmlvPzogeyBbY2xhdmU6IHN0cmluZ106IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XHJcbiAgICBpZiAodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIG51bGw7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXC8vZywgXCIvXFx1MjA2M1wiKS5yZXBsYWNlKC9cXC9cXHUyMDYzKFxcdylcXGIvZywgJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCAodG9kbykgPT4gYFske3RvZG99XWApLnJlcGxhY2UoL1xcQFxcdytcXEAvZywgKHRvZG8pID0+IGBbJHt0b2RvfV1gKTtcclxuICAgIGlmICghZGljY2lvbmFyaW8gfHwgdHJ1ZSkgcmV0dXJuIHRleHQ7XHJcbiAgICAvKlxyXG4gICAgcmV0dXJuIDxzcGFuPntwYXJ0ZXMubWFwKChwYXJ0ZTpzdHJpbmcsIGk6bnVtYmVyKSA9PiA8c3BhbiBzdHlsZT17aSUyPT0xP3t0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifTp7fX0+IHtwYXJ0ZStcIiBcIn0gPC9zcGFuPil9PC9zcGFuPlxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJGVmFyTmFtZXMoc2FsdG86IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGNvbnN0IGFybW9Ob21TYWx0byA9IHNhbHRvPy5zdWJzdHJpbmcoMCwgMikgPT0gJ0Y6JyA/IHNhbHRvLnNsaWNlKDIpIDogc2FsdG87XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGxpc3RvOiAnJEIuRjonICsgYXJtb05vbVNhbHRvIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgYWdyZWdhcjogJyRCLkY6JyArIGFybW9Ob21TYWx0byArICdfYWdyZWdhcicgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBpZEZvcm11bGFyaW86ICdGOicgKyBhcm1vTm9tU2FsdG8gYXMgSWRGb3JtdWxhcmlvXHJcbiAgICB9O1xyXG59XHJcblxyXG5jb25zdCBWRVJfRE9NSU5JTyA9IGZhbHNlOyAvLyBlbCBlbmN1ZXN0YWRvciBubyBuZWNlc2l0YSB2ZXIgZWwgZG9taW5pbyBlbiBjYWRhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBkb21pbmlvIGRlcGVuZGUgZGVsIMOhcmVhIHkgc2UgZGVkdWNlIGRlbCBwcmltZXIgZMOtZ2l0byBkZWwgbsO6bWVybyBkZSBlbmN1ZXN0YVxyXG4vLyBubyBwb25lciBWRVJfRE9NSU5JTyBlbiB0cnVlLCBjYW1iaWFyIHBvciB1bmEgdmFyaWFibGUgcXVlIHNlIGZpamUgc2kgZWwgRE0gZXN0w6EgZW4gbW9kbyBwcnVlYmEgbyBlbiBtb2RvIFwiZGlzZcOxbyBjb25jZXB0dWFsXCJcclxuXHJcbmNvbnN0IElEX0JPVE9OX1ZPTFZFUl9IRFIgPSAnYm90b24tdm9sdmVyLWhkcic7XHJcbmNvbnN0IElEX0JPVE9OX0NFUlJBUiA9ICdib3Rvbi1jZXJyYXItZW5jdWVzdGEnO1xyXG5cclxudmFyIGRlYmVTYWx0YXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xyXG4gICAgLypcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2OktleWJvYXJkRXZlbnQpPT57XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGV2LmtleSA9PSAnRW50ZXInIHx8IGV2LmtleUNvZGUgPT0gMTM7XHJcbiAgICB9KVxyXG4gICAgKi9cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBkZWJlU2FsdGFyID0gZmFsc2U7XHJcbiAgICB9KVxyXG59KVxyXG5cclxuLy8gLypcclxuXHJcbnR5cGUgQ29tbW9uQXR0cmlidXRlcyA9IHsgY2xhc3NOYW1lPzogc3RyaW5nLCBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMsIGlkPzogc3RyaW5nLCB0YWJJbmRleD86IG51bWJlciB9IC8vIENTU1Byb3BlcnRpZXNcclxudHlwZSBDb2xvclZhbHVlcyA9ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ2RlZmF1bHQnIHwgJ2luaGVyaXQnIHwgJ3N1Y2Nlc3MnXHJcblxyXG5leHBvcnQgdHlwZSBMaWJyZURlc3BsaWVndWVUeXBlID0gKHByb3BzOiB7XHJcbiAgICBrZXk6IHN0cmluZ1xyXG4gICAgY2FzaWxsZXJvOiBMaWJyZVxyXG4gICAgZm9ybXVsYXJpbzogRm9ybXVsYXJpb1xyXG4gICAgZm9yUGs6IEZvclBrXHJcbn0pID0+IEpTWC5FbGVtZW50O1xyXG5cclxudmFyIExpYnJlRGVzcGxpZWd1ZTogTGlicmVEZXNwbGllZ3VlVHlwZVxyXG5cclxuZXhwb3J0IGNvbnN0IEJ1dHRvbiA9ICh7IHZhcmlhbnQsIG9uQ2xpY2ssIGRpc2FibGVkLCBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjb2xvciwgc2l6ZSxcclxuICAgIGRpc2FibGVFbGV2YXRpb24sIGRpc2FibGVGb2N1c1JpcHBsZSwgZGlzYWJsZVJpcHBsZSwgdHlwZSxcclxuICAgIC4uLm90aGVyXHJcbn06IHtcclxuICAgIHZhcmlhbnQ/OiBzdHJpbmcsXHJcbiAgICBjb2xvcj86IENvbG9yVmFsdWVzLFxyXG4gICAgb25DbGljaz86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxCdXR0b25FbGVtZW50PiwgLy8gIChldmVudDpNb3VzZUV2ZW50LyogPEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PiovKT0+dm9pZCxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHNpemU/OiAnc21hbGwnLFxyXG4gICAgdHlwZT86ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnLFxyXG4gICAgZGlzYWJsZUVsZXZhdGlvbj86IGFueSwgZGlzYWJsZUZvY3VzUmlwcGxlPzogYW55LCBkaXNhYmxlUmlwcGxlPzogYW55LFxyXG59ICYgQ29tbW9uQXR0cmlidXRlcykgPT4gPGJ1dHRvblxyXG4gICAgey4uLm90aGVyfVxyXG4gICAgY2xhc3NOYW1lPXtgYnRuIGJ0biR7dmFyaWFudCA9PSAnY29udGFpbmVkJyA/ICcnIDogJy0nICsgKHZhcmlhbnQgPT0gJ291dGxpbmVkJyA/ICdvdXRsaW5lJyA6IHZhcmlhbnQpfS0keyhjb2xvciA9PSAnZGVmYXVsdCcgfHwgY29sb3IgPT0gJ2luaGVyaXQnID8gJ3NlY29uZGFyeScgOiBjb2xvciA9PSAnc2Vjb25kYXJ5JyA/ICdkYW5nZXInIDogY29sb3IpIHx8ICdzZWNvbmRhcnknfSAke2NsYXNzTmFtZSB8fCAnJ30gJHtzaXplID09ICdzbWFsbCcgPyAnYnRuLXNtJyA6ICcnfWB9XHJcbiAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICB0eXBlPXt0eXBlfVxyXG4gICAgb25DbGljaz17b25DbGlja31cclxuPntjaGlsZHJlbn08L2J1dHRvbj47XHJcblxyXG5jb25zdCBzdHlsZVRvQ3NzID0gKHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcclxuICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnIHx8IHN0eWxlID09IG51bGwpIHJldHVybiBzdHlsZTtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzdHlsZSkubWFwKChbaywgdl0pID0+XHJcbiAgICAgICAgYCR7ay5yZXBsYWNlKC9bQS1aXS9nLCBtID0+IFwiLVwiICsgbS50b0xvd2VyQ2FzZSgpKX06JHt2fWBcclxuICAgICkuam9pbignOycpO1xyXG59XHJcblxyXG5jb25zdCBCdXR0b24yID0gKHsgdmFyaWFudCwgb25DbGljaywgZGlzYWJsZWQsIGNoaWxkcmVuLCBjbGFzc05hbWUsIGNvbG9yLCBzaXplLCBzdHlsZSwgLi4ub3RoZXIgfToge1xyXG4gICAgdmFyaWFudD86IHN0cmluZyxcclxuICAgIGNvbG9yPzogQ29sb3JWYWx1ZXMsXHJcbiAgICBvbkNsaWNrPzogKCkgPT4gdm9pZCxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG4gICAgY2hpbGRyZW46IGFueSxcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHNpemU/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/ICdTSScgOiAnTk8nfT57YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLm5vbWJyZSl9PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT0nYWNsYXJhY2lvbic+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKX08L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAgICAgIDwvR3JpZD5cclxuICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgIDxTYWx0b0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IC8+XHJcbiAgICA8L0dyaWQ+XHJcbn1cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lcyB7XHJcbiAgICB2YXJfbmFtZTogSWRWYXJpYWJsZSxcclxuICAgIGRlc3BsaWVndWVDb250ZW5pZG86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCBudWxsLFxyXG4gICAgY2FzaWxsZXJvczogT3BjaW9uW11cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIFNpTm9EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVyb0Nvbk9wY2lvbmVzOiBJY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrOiBGb3JQaywgZGVzcGxpZWd1ZUNvbnRlbmlkbzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSB7XHJcbiAgICByZXR1cm4gPE9wY2lvbmVzRGVzcGxpZWd1ZVxyXG4gICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtwcm9wcy5jYXNpbGxlcm9Db25PcGNpb25lc31cclxuICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgbGVlcj17ZmFsc2V9XHJcbiAgICAgICAgZGVzcGxpZWd1ZUNvbnRlbmlkbz17cHJvcHMuZGVzcGxpZWd1ZUNvbnRlbmlkb31cclxuICAgIC8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShwcmVndW50YTogUHJlZ3VudGEgfCBPcGNpb25NdWx0aXBsZSB8IENvbmp1bnRvUHJlZ3VudGFzKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudFxyXG4gICAgKSA9PiB7XHJcbiAgICAgICAgdmFyIHZhbG9yQWN0dWFsID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiByZXNwdWVzdGFzW3ByZWd1bnRhLnZhcl9uYW1lXTtcclxuICAgICAgICB2YXIgZmVlZGJhY2tSb3cgPSBmZWVkYmFja0Zvcm0uZmVlZGJhY2s7XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrVmFyID0gcHJlZ3VudGEudmFyX25hbWUgPT0gbnVsbCA/IG51bGwgOiBmZWVkYmFja1Jvd1twcmVndW50YS52YXJfbmFtZV07XHJcbiAgICAgICAgdmFyIHRpZW5lVmFsb3IgPSB2YWxvckFjdHVhbCAhPSBudWxsICYmIGZlZWRiYWNrVmFyICE9IG51bGwgPyAoZmVlZGJhY2tWYXIuY29uUHJvYmxlbWEgPyAnaW52YWxpZG8nIDogJ3ZhbGlkbycpIDogJ05PJztcclxuICAgICAgICB2YXIgZXN0YWRvOiBFc3RhZG9WYXJpYWJsZTtcclxuICAgICAgICBpZiAocHJlZ3VudGEudGlwb3Zhcikge1xyXG4gICAgICAgICAgICBlc3RhZG8gPSBmZWVkYmFja1Zhcj8uZXN0YWRvITtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZmVlZGJhY2tNdWx0aSA9IHByZWd1bnRhLmNhc2lsbGVyb3MuZmlsdGVyKGMgPT4gYy52YXJfbmFtZSAhPSBudWxsKS5yZWR1Y2UoKHB2LCBvbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZiID0gZmVlZGJhY2tSb3c/LltvbS52YXJfbmFtZSFdIVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0aWVuZUFjdHVhbDogcHYudGllbmVBY3R1YWwgfHwgZmIuZXN0YWRvID09ICdhY3R1YWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGFTYWx0ZWFkYTogcHYuZXN0YVNhbHRlYWRhICYmIChmYi5lc3RhZG8gPT0gJ3NhbHRlYWRhJyB8fCBmYi5lc3RhZG8gPT0gJ2Z1ZXJhX2RlX2ZsdWpvX3Bvcl9zYWx0bycpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHsgdGllbmVBY3R1YWw6IGZhbHNlLCBlc3RhU2FsdGVhZGE6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGVzdGFkbyA9IGZlZWRiYWNrTXVsdGkudGllbmVBY3R1YWwgPyAnYWN0dWFsJyA6IGZlZWRiYWNrTXVsdGkuZXN0YVNhbHRlYWRhID8gJ3NhbHRlYWRhJyA6ICd0b2RhdmlhX25vJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdudWVzdHJvLXZhbGlkYXRvcicsIGVzdGFkbyk7XHJcbiAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGVsZW1lbnRvLCAndGllbmUtdmFsb3InLCB0aWVuZVZhbG9yKTtcclxuICAgICAgICBzZXRBdHRyRGlzdGludG8oZWxlbWVudG8sICdlc3RhLWluaGFiaWxpdGFkYScsIGZlZWRiYWNrVmFyPy5pbmhhYmlsaXRhZGEgPyAnU0knIDogJ05PJyk7XHJcbiAgICAgICAgaWYgKHByZWd1bnRhLnZhcl9uYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBvcGNpb25lczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRvLnF1ZXJ5U2VsZWN0b3JBbGwoYC5ib3Rvbi1vcGNpb25bbWktdmFyaWFibGU9XCIke3ByZWd1bnRhLnZhcl9uYW1lfVwiXWApLCAwKTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvT3BjaW9uOiBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgICAgICAgICAgZm9yIChlbGVtZW50b09wY2lvbiBvZiBvcGNpb25lcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbG9yT3BjaW9uID0gZWxlbWVudG9PcGNpb24uZ2V0QXR0cmlidXRlKCd2YWxvci1vcGNpb24nKTtcclxuICAgICAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhlbGVtZW50b09wY2lvbiwgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvck9wY2lvbiA9PSB2YWxvckFjdHVhbCA/IFwiU0lcIiA6IFwiTk9cIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9zSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW1lbnRvLnF1ZXJ5U2VsZWN0b3JBbGwoJy52YXJpYWJsZScpKTtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRvSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGZvciAoZWxlbWVudG9JbnB1dCBvZiBlbGVtZW50b3NJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhlbGVtZW50b0lucHV0LCAndmFsdWUnLCB2YWxvckFjdHVhbCA9PSBudWxsID8gJycgOiB2YWxvckFjdHVhbC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYm90b25Oc05jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuc25jLXByZWd1bnRhLVwiICsgcHJlZ3VudGEudmFyX25hbWUpITtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGJvdG9uTnNOYywgJ29wY2lvbi1zZWxlY2Npb25hZGEnLCB2YWxvckFjdHVhbCA9PSAocHJlZ3VudGEudmFsb3JfbnNfbmMgPz8gLTkpID8gXCJTSVwiIDogXCJOT1wiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gT3BjaW9uTXVsdGlwbGVEZXNwbGllZ3VlKHByb3BzOiB7IG9wY2lvbk06IE9wY2lvbk11bHRpcGxlLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgY29uc3QgeyBvcGNpb25NIH0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBvcGNpb25NLSR7b3BjaW9uTS5pZF9jYXNpbGxlcm99YDtcclxuICAgIHZhciBzdHlsZXM6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBvcGNpb25NLmVzcGVjaWFsPy5mbGV4RGlyZWN0aW9uID8geyBmbGV4RGlyZWN0aW9uOiBvcGNpb25NLmVzcGVjaWFsLmZsZXhEaXJlY3Rpb24gfSA6IHsgZmxleFdyYXA6ICd3cmFwJyB9O1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IHJlZ2lzdHJhZG9yRGVWYXJpYWJsZShvcGNpb25NKVxyXG4gICAgfSlcclxuICAgIGNvbnN0IHVwZGF0ZVdpbmRvd1dpZHRoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNldFdpbmRvd1dpZHRoKHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBbd2luZG93V2lkdGgsIHNldFdpbmRvd1dpZHRoXSA9IHVzZVN0YXRlKHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVXaW5kb3dXaWR0aCk7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e29wY2lvbk19XHJcbiAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J2xhdGVyYWwnXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlc31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NfVxyXG4gICAgICAgICAgICB2ZXJJZEd1aW9uPXt0cnVlfVxyXG4gICAgICAgICAgICBsZWVyPXtvcGNpb25NLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIHN0eWxlPXt7IG1heFdpZHRoOiB3aW5kb3dXaWR0aCAtIDQwMCB9fSAvL1RPRE8gTUVKT1JBUlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPFNpTm9EZXNwbGllZ3VlXHJcbiAgICAgICAgICAgIGNhc2lsbGVyb0Nvbk9wY2lvbmVzPXtvcGNpb25NfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLm9wY2lvbk0uZGVzcGxpZWd1ZUNvbnRlbmlkbyA/PyAnaG9yaXpvbnRhbCd9XHJcbiAgICAgICAgLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIENhc2lsbGVyb0VuY2FiZXphYmxlID0gRm9ybXVsYXJpbyB8IEJsb3F1ZSB8IEZpbHRybyB8IENvbmp1bnRvUHJlZ3VudGFzIHwgUHJlZ3VudGEgfCBPcGNpb25NdWx0aXBsZSB8IFByZWd1bnRhU2ltcGxlIHwgQ29uc2lzdGVuY2lhIHwgVGV4dG8gfCBQTWF0cml6XHJcblxyXG5jb25zdCBnZXRMb3NNZXRhZGF0b3MgPSAoY2FzaWxsZXJvOiBDYXNpbGxlcm9FbmNhYmV6YWJsZSk6IFJlYWN0LkpTWC5FbGVtZW50ID0+XHJcbiAgICA8ZGl2IGxvcy1tZXRhZGF0b3M9XCJzaVwiPlxyXG4gICAgICAgIDxzcGFuIGVsLW1ldGFkYXRvPVwidmFyaWFibGVcIj57Y2FzaWxsZXJvLnZhcl9uYW1lfTwvc3Bhbj5cclxuICAgICAgICB7Y2FzaWxsZXJvLnRpcG92YXIgJiYgY2FzaWxsZXJvLnRpcG92YXIgIT0gJ29wY2lvbmVzJyAmJiBjYXNpbGxlcm8udGlwb3ZhciAhPSAnc2lfbm8nID9cclxuICAgICAgICAgICAgPHNwYW4gZWwtbWV0YWRhdG89XCJ0aXBvdmFyXCI+e2Nhc2lsbGVyby50aXBvdmFyfTwvc3Bhbj5cclxuICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8udmFyX25hbWUgJiYgY2FzaWxsZXJvLm9wdGF0aXZvID8gPHNwYW4gZWwtbWV0YWRhdG89XCJvcHRhdGl2YVwiPm9wdGF0aXZhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5jYWxjdWxhZGEgPyA8c3BhbiBlbC1tZXRhZGF0bz1cImNhbGN1bGFkYVwiPmNhbGN1bGFkYTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIHtjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IDxzcGFuIGVsLW1ldGFkYXRvPVwib2N1bHRhXCI+b2N1bHRhPC9zcGFuPiA6IG51bGx9XHJcbiAgICAgICAge2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyID8gPHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25faGFiaWxpdGFyXCI+aGFiaWxpdGE6IHtjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcn08L3NwYW4+IDogbnVsbH1cclxuICAgICAgICB7Y2FzaWxsZXJvLmVzcGVjaWFsPy5hdXRvaW5nID8gPHNwYW4gZWwtbWV0YWRhdG89XCJleHByZXNpb25fYXV0b2luZ1wiPmF1dG9pbmc6IHtjYXNpbGxlcm8uZXNwZWNpYWw/LmF1dG9pbmd9PC9zcGFuPiA6IG51bGx9XHJcbiAgICA8L2Rpdj5cclxuXHJcbmZ1bmN0aW9uIEVuY2FiZXphZG9EZXNwbGllZ3VlKHByb3BzOiB7XHJcbiAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMsXHJcbiAgICBjYXNpbGxlcm86IENhc2lsbGVyb0VuY2FiZXphYmxlLFxyXG4gICAgdmVySWRHdWlvbj86IGJvb2xlYW4sXHJcbiAgICBsZWVyPzogYm9vbGVhbixcclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBjb25DYW1wb09wY2lvbmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMpXHJcbiAgICB2YXIgaGFuZGxlQ2xpY2tCb3JyYXIgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogY2FzaWxsZXJvLnZhcl9uYW1lIGFzIElkVmFyaWFibGUsIGZvclBrOiBmb3JQayB9KVxyXG4gICAgfTtcclxuICAgIHZhciB2ZXJfaWQgPSBjYXNpbGxlcm8udmVyX2lkID8/IGNhc2lsbGVyby5jYXNpbGxlcm87XHJcbiAgICB2YXIgY2FsY3VsYWRhID0gY2FzaWxsZXJvLmNhbGN1bGFkYTtcclxuICAgIHZhciBpZCA9IGBpZC1kaXYtJHtjYXNpbGxlcm8udmFyX25hbWUgfHwgY2FzaWxsZXJvLmNhc2lsbGVyb31gO1xyXG4gICAgdmFyIGlkQWNjaW9uZXMgPSBcImFjY2lvbmVzLVwiICsgaWQ7XHJcbiAgICByZXR1cm4gPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT1cImVuY2FiZXphZG9cIlxyXG4gICAgICAgIGRlYmUtbGVlcj17cHJvcHMubGVlciA/ICdTSScgOiAnTk8nfVxyXG4gICAgICAgIHN0eWxlPXtwcm9wcy5zdHlsZX1cclxuICAgID5cclxuICAgICAgICA8ZGl2IGlkPXtpZH0gY2xhc3NOYW1lPVwiaWQtZGl2XCIgdGl0bGU9e2Ake2Nhc2lsbGVyby5jYXNpbGxlcm99IC0gJHtjYXNpbGxlcm8udmFyX25hbWV9YH1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQWNjaW9uZXMpO1xyXG4gICAgICAgICAgICAgICAgZGl2IS5zZXRBdHRyaWJ1dGUoXCJhY2Npb24tdmlzaWJsZVwiLCAoMSAtIE51bWJlcihkaXYhLmdldEF0dHJpYnV0ZShcImFjY2lvbi12aXNpYmxlXCIpKSkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLiBWZXIgcXXDqSBoYWNlbW9zIGN1YW5kbyBzZSB0b2NhIGVsIElEIGRlIGxhIHByZWd1dG5hXHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25faWRfcHJlZ3VudGEsIHsgcHJlZ3VudGE6IGNhc2lsbGVyby5jYXNpbGxlcm8gYXMgSWRQcmVndW50YSwgZm9yUGsgfSk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlkXCI+XHJcbiAgICAgICAgICAgICAgICB7dmVyX2lkfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgeyhjYXNpbGxlcm8udGlwb3ZhciA9PSBcInNpX25vXCIgfHwgY2FzaWxsZXJvLnRpcG92YXIgPT0gXCJvcGNpb25lc1wiKSA/IDxDYW1wbyBkaXNhYmxlZD17ZmFsc2V9IHByZWd1bnRhPXtjYXNpbGxlcm8gYXMgdW5rbm93biBhcyBQcmVndW50YVNpbXBsZX0gZm9yUGs9e2ZvclBrfSBtaW5pPXt0cnVlfSBoaWRkZW49eyFjb25DYW1wb09wY2lvbmVzICYmICdxdWl0YXInfSAvPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNjaW9uZXMtcHJlZ3VudGFcIiBpZD17aWRBY2Npb25lc30gYWNjaW9uLXZpc2libGU9XCIwXCI+XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lID8gPGRpdj48QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e1wiYm9ycmFyLXByZWd1bnRhLVwiICsgY2FzaWxsZXJvLnZhcl9uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIG1pLXZhcmlhYmxlPXtjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3Rvbi1wcmVndW50YS1ib3JyYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrQm9ycmFyfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLkRlbGV0ZUZvcmV2ZXIgLz5cclxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPjwvZGl2PiA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICB7Y2FzaWxsZXJvLnZhcl9uYW1lID8gKG5zX25jID0+IDxkaXY+PEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPXtcIm5zbmMtcHJlZ3VudGEtXCIgKyBjYXNpbGxlcm8udmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgbWktdmFyaWFibGU9e2Nhc2lsbGVyby52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvdG9uLXByZWd1bnRhLW5zbmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzaWd1aWVudGVWYXJpYWJsZSB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBuc19uYywgdmFyaWFibGU6IGNhc2lsbGVyby52YXJfbmFtZSBhcyBJZFZhcmlhYmxlLCBmb3JQazogZm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNpZ3VpZW50ZVZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKGNhc2lsbGVyby5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICBOUy9OQ1xyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+PC9kaXY+KShjYXNpbGxlcm8udmFsb3JfbnNfbmMgPz8gLTkpIDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtZGl2XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm9tYnJlXCI+e2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5ub21icmUpfVxyXG4gICAgICAgICAgICAgICAge2Nhc2lsbGVyby5lc3BlY2lhbD8uZ3BzID9cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwib3V0bGluZWRcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMTBweCcgfX0gb25DbGljaz17KF9ldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IGNhc2lsbGVyby52YXJfbmFtZSE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZ3JlZ2FySW5mb0dQUyA9IChpbmZvOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJlc3B1ZXN0YXM6IHJBY3R1YWxlcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxvckFjdHVhbCA9IHJBY3R1YWxlc1t2YXJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXV4ID0gSlNPTi5wYXJzZSh2YWxvckFjdHVhbD8udG9TdHJpbmcoKSB8fCBcIltdXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eC51bnNoaWZ0KGluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiB2YXJOYW1lLCByZXNwdWVzdGE6IEpTT04uc3RyaW5naWZ5KGF1eCkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeyBzaWd1aWVudGVWYXJpYWJsZSB9ID0gYWdyZWdhckluZm9HUFMoYCR7ZGF0ZXRpbWUubm93KCkudG9ZbWRIbXMoKX0gLSBlc3BlcmFuZG8gcHVudG8gZ3BzYCkgfHwge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmZvY2FyRWxlbWVudG9EZVZhcmlhYmxlKHNpZ3VpZW50ZVZhcmlhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ocG9zaXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBoZWFkaW5nLCBzcGVlZCB9ID0gcG9zaXRpb24uY29vcmRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFUb1NhdmUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkczogeyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZSwgYWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIGhlYWRpbmcsIHNwZWVkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcG9zaXRpb24udGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FySW5mb0dQUyhKU09OLnN0cmluZ2lmeShkYXRhVG9TYXZlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZ2FySW5mb0dQUyhlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgeyBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWUsIHRpbWVvdXQ6IDEwMDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0+PElDT04uTG9jYXRpb24gLz48L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge2Nhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNsYXJhY2lvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtjYXNpbGxlcm8uc2FsdG8gJiYgY2FzaWxsZXJvLnRpcG9jID09ICdGSUxUUk8nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gcHJlZmlqbz17YnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pIX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha2VhYmxlVGV4dChjYXNpbGxlcm8uYWNsYXJhY2lvbilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICAgICAge2dldExvc01ldGFkYXRvcyhjYXNpbGxlcm8pfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YShwcm9wczogeyBmb3JQazogRm9yUGssIHZhcmlhYmxlQm9ycmFyOiBJZFZhcmlhYmxlIH0pIHtcclxuICAgIHZhciBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZSghIXByb3BzLnZhcmlhYmxlQm9ycmFyKVxyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ09ORklSTUFSX0JPUlJBUl9SRVNQVUVTVEEoeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBudWxsIH0pKTtcclxuICAgICAgICBzZXRPcGVuKGZhbHNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8UG9wb3ZlclxyXG4gICAgICAgIGlkPXtcInBvcG92ZXItY29uZmlybWFyXCJ9XHJcbiAgICAgICAgb3Blbj17b3Blbn1cclxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZX1cclxuICAgICAgICBhbmNob3JPcmlnaW49e3tcclxuICAgICAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJyxcclxuICAgICAgICB9fVxyXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbj17e1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXHJcbiAgICAgICAgICAgIGhvcml6b250YWw6ICdsZWZ0JyxcclxuICAgICAgICB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PkxhIHByZWd1bnRhIHRpZW5lIHJlZ2lzdHJhZGEgdW5hIHJlc3B1ZXN0YSBxdWUgbm8gZnVlIGRldGVjdGFkYSBjb21vIGVycsOzbmVhPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uZmlybWEtYm90b25lc1wiPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgdmFyaWFudD1cIm91dGxpbmVkXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLnZhcmlhYmxlQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogcHJvcHMudmFyaWFibGVCb3JyYXIsIHJlc3B1ZXN0YTogbnVsbCB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgfX0+Ym9ycmFyIHJlc3B1ZXN0YTwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT52b2x2ZXIgc2luIGJvcnJhcjwvQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9Qb3BvdmVyPjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJOdWVzdHJhTG9uZ2l0dWQobG9uZ2l0dWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgIHJldHVybiBsb25naXR1ZDtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShzaWd1aWVudGVWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluKSB7XHJcbiAgICBkZWJlU2FsdGFyID0gZmFsc2U7XHJcbiAgICB2YXIgeyB0b3AsIGVuZm9jYWRvLCBlbGVtZW50b0lucHV0VmFyaWFibGUgfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhzaWd1aWVudGVWYXJpYWJsZSk7XHJcbiAgICBpZiAodG9wICE9IG51bGwgJiYgdG9wID4gMCAmJiAoIWVuZm9jYWRvIHx8IFwic2FsdGEgc2llbXByZVwiKSkge1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcCwgbGVmdDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPy5mb2N1cygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDYW1wbyhwcm9wczogeyBkaXNhYmxlZDogYm9vbGVhbiwgcHJlZ3VudGE6IFByZWd1bnRhU2ltcGxlIHwgUHJlZ3VudGFDb25PcGNpb25lcyB8IFByZWd1bnRhQ29uU2lObyB8IE9wY2lvbk11bHRpcGxlLCBmb3JQazogRm9yUGssIG1pbmk/OiBib29sZWFuLCBoaWRkZW4/OiBib29sZWFuIHwgJ3F1aXRhcicgfSkge1xyXG4gICAgdmFyIHsgcHJlZ3VudGEsIGRpc2FibGVkLCBtaW5pIH0gPSBwcm9wcztcclxuICAgIHZhciB7IHNhbHRvQXV0b21hdGljbywgY29uQ2FtcG9PcGNpb25lcyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuICAgIGNvbnN0IGxvbmdpdHVkID0gbWluaSA/IHByZWd1bnRhLmNhc2lsbGVyb3MucmVkdWNlKChhY3VtLCBvKSA9PiBNYXRoLm1heChvLmNhc2lsbGVyby50b1N0cmluZygpLmxlbmd0aCwgYWN1bSksIDApIDpcclxuICAgICAgICBwcmVndW50YS5sb25naXR1ZDtcclxuICAgIC8vIHZhciBbdmFsb3IsIHNldFZhbG9yXSA9IHVzZVN0YXRlKHByb3BzLnZhbG9yKTtcclxuICAgIHZhciBbZWRpdGFuZG8sIHNldEVkaXRhbmRvXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIC8vIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAvLyAgICAgc2V0VmFsb3IocHJvcHMudmFsb3IpXHJcbiAgICAvLyB9LCBbcHJvcHMudmFsb3JdKTtcclxuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XHJcbiAgICAgICAgbWF4TGVuZ3RoOiBsb25naXR1ZCxcclxuICAgICAgICBlbnRlcktleUhpbnQ6IFwibmV4dFwiIGFzIGNvbnN0LFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKG51ZXZvVmFsb3I6IFZhbG9yIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pID0+IHtcclxuICAgICAgICB2YXIgeyBzaWd1aWVudGVWYXJpYWJsZSB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogcHJlZ3VudGEudmFyX25hbWUgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWV2b1ZhbG9yIH0pO1xyXG4gICAgICAgIGlmIChzaWd1aWVudGVWYXJpYWJsZSAmJiBkZWJlU2FsdGFyKSB7XHJcbiAgICAgICAgICAgIChwcmVndW50YS5lc3BlY2lhbD8ubm9TY3JvbGwgPT0gdHJ1ZSkgPyBudWxsIDogZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZShwcmVndW50YS5lc3BlY2lhbD8uc2Nyb2xsVG8gPz8gc2lndWllbnRlVmFyaWFibGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoeyBlc0JvdG9uQ29uZmlybWFyIH06IHsgZXNCb3RvbkNvbmZpcm1hcjogYm9vbGVhbiB9KSA9PiB7XHJcbiAgICAgICAgZGViZVNhbHRhciA9IGVzQm90b25Db25maXJtYXIgPyB0cnVlIDogKHNhbHRvQXV0b21hdGljbyB8fCBjb25DYW1wb09wY2lvbmVzKTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgaXNJbnB1dEZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKTtcclxuICAgICAgICBpZiAoaXNJbnB1dEZvY3VzZWQpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHZhci0ke3ByZWd1bnRhLnZhcl9uYW1lIHx8ICcnfWApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKGVsZW1lbnRvSW5wdXRWYXJpYWJsZSA/IGVsZW1lbnRvSW5wdXRWYXJpYWJsZS52YWx1ZSA6IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIG51ZXN0cmFMb25naXR1ZCA9IGNhbGN1bGFyTnVlc3RyYUxvbmdpdHVkKHByZWd1bnRhLmxvbmdpdHVkIHx8IGxvbmdpdHVkKVxyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2FtcG9cIiBudWVzdHJhLWxvbmdpdHVkPXtudWVzdHJhTG9uZ2l0dWR9IHN0eWxlPXtwcm9wcy5oaWRkZW4gPT0gJ3F1aXRhcicgPyB7IGRpc3BsYXk6ICdub25lJyB9IDogcHJvcHMuaGlkZGVuID8geyB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9IDogdW5kZWZpbmVkfT5cclxuICAgICAgICB7bWluaSA/IG51bGwgOiA8Qm90b25Cb3JyYXJcclxuICAgICAgICAgICAgaWQ9e2Bib3JyYXItYWJpZXJ0YS0ke3ByZWd1bnRhLnZhcl9uYW1lfWB9XHJcbiAgICAgICAgICAgIHZhcmlhYmxlPXtwcmVndW50YS52YXJfbmFtZX1cclxuICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgIC8+fVxyXG4gICAgICAgIDxmb3JtIFxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNhbXBvLXdyYXBwZXJcIiBcclxuICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2NvbnRlbnRzJyB9fSBcclxuICAgICAgICAgICAgb25TdWJtaXQ9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVTdWJtaXQoeyBlc0JvdG9uQ29uZmlybWFyOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5wdXQtY2FtcG9cIj5cclxuICAgICAgICAgICAgICAgIDxUZXh0RmllbGRcclxuICAgICAgICAgICAgICAgICAgICBpZD17YHZhci0ke3ByZWd1bnRhLnZhcl9uYW1lIHx8ICcnfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IHByZWd1bnRhLmVzcGVjaWFsPy5ncHN9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmFyaWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyLWxlbmd0aD17cHJlZ3VudGEubG9uZ2l0dWR9IFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXtpbnB1dFByb3BzfVxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9e3ByZWd1bnRhLmRlc3BsaWVndWVUaXBvSW5wdXQgPz8gYWRhcHRhclRpcG9WYXJDYXNpbGxlcm8ocHJlZ3VudGEudGlwb3Zhcil9XHJcbiAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KF9ldmVudCkgPT4gc2V0RWRpdGFuZG8odHJ1ZSl9XHJcbiAgICAgICAgICAgICAgICAgICAgb25CbHVyPXsoX2V2ZW50LCB2YWxvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZSh2YWxvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRhbmRvKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlc0VudGVyID0gKGV2ZW50LmtleSA9PSAnRW50ZXInIHx8IGV2ZW50LmtleUNvZGUgPT0gMTMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc0VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KHsgZXNCb3RvbkNvbmZpcm1hcjogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHtkaXNhYmxlZCB8fCBwcmVndW50YS5lc3BlY2lhbD8uZ3BzIHx8IG1pbmkgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm90b24tY29uZmlybWFyLWNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PXtlZGl0YW5kbyA/IFwiY29udGFpbmVkXCIgOiAnb3V0bGluZWQnfSBzaXplPVwic21hbGxcIiBjb2xvcj17ZWRpdGFuZG8gPyAncHJpbWFyeScgOiAnZGVmYXVsdCd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLWNvbmZpcm1hcj17cHJlZ3VudGEudmFyX25hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdWJtaXQoeyBlc0JvdG9uQ29uZmlybWFyOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID48SUNPTi5DaGVjayAvPjwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuaW50ZXJmYWNlIEljYXNpbGxlcm9Db25PcGNpb25lcyB7XHJcbiAgICB2YXJfbmFtZTogSWRWYXJpYWJsZSxcclxuICAgIGNhc2lsbGVyb3M6IE9wY2lvbltdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wY2lvbmVzRGVzcGxpZWd1ZShcclxuICAgIHsgY2FzaWxsZXJvQ29uT3BjaW9uZXMsIGZvclBrLCBsZWVyLCBkZXNwbGllZ3VlQ29udGVuaWRvIH06XHJcbiAgICAgICAgeyBjYXNpbGxlcm9Db25PcGNpb25lczogSWNhc2lsbGVyb0Nvbk9wY2lvbmVzLCBmb3JQazogRm9yUGssIGxlZXI6IGJvb2xlYW4sIGRlc3BsaWVndWVDb250ZW5pZG86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfVxyXG4pIHtcclxuICAgIGNvbnN0IGRlc3BsZWdhck90cm9zID0gKG9wY2lvbjogT3BjaW9uLCBzb2xvUGFyYURlc3BsaWVndWU6ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCBudWxsKSA9PiBvcGNpb24uY2FzaWxsZXJvcy5tYXAoKHN1YlByZWd1bnRhOiBQcmVndW50YSkgPT4gKFxyXG4gICAgICAgIHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBudWxsIHx8IHNvbG9QYXJhRGVzcGxpZWd1ZSA9PSBzdWJQcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID9cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdHJvcy1lc3BlY2lmaWNhclwiIHN0eWxlPXt7IHdpZHRoOiAnMTAwJScgfX0ga2V5PXtzdWJQcmVndW50YS5pZF9jYXNpbGxlcm99PlxyXG4gICAgICAgICAgICAgICAgPFByZWd1bnRhRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgIHByZWd1bnRhPXtzdWJQcmVndW50YX1cclxuICAgICAgICAgICAgICAgICAgICBmb3JQaz17Zm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzcGxpZWd1ZUVuY2FiZXphZG89J3N1cGVyaW9yJ1xyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+IDogbnVsbFxyXG4gICAgKSlcclxuICAgIHJldHVybiA8PjxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvcGNpb25lc1wiIGRlc3BsaWVndWUtY29udGVuaWRvPXtkZXNwbGllZ3VlQ29udGVuaWRvID8/ICd2ZXJ0aWNhbCd9PlxyXG4gICAgICAgICAgICB7Y2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjogT3BjaW9uLCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICA8R3JpZCBrZXk9e29wY2lvbi5pZF9jYXNpbGxlcm99IGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBvY3VsdGFyLXNhbHRlYWRhPXtvcGNpb24uZGVzcGxpZWd1ZU9jdWx0YSA/IChvcGNpb24uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPE9wY2lvbkRlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb259XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXtjYXNpbGxlcm9Db25PcGNpb25lcy52YXJfbmFtZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsb3JPcGNpb249e29wY2lvbi5jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtmb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVlcj17bGVlcn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uQm90b25Cb3JyYXI9e2kgPT0gMCB8fCBkZXNwbGllZ3VlQ29udGVuaWRvICE9ICdob3Jpem9udGFsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHtkZXNwbGllZ3VlQ29udGVuaWRvID09ICdob3Jpem9udGFsJyA/IG51bGwgOiBkZXNwbGVnYXJPdHJvcyhvcGNpb24sIG51bGwpfVxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICAgICAge2Rlc3BsaWVndWVDb250ZW5pZG8gPT0gJ2hvcml6b250YWwnID8gY2FzaWxsZXJvQ29uT3BjaW9uZXMuY2FzaWxsZXJvcy5tYXAoKG9wY2lvbjogT3BjaW9uKSA9PlxyXG4gICAgICAgICAgICBkZXNwbGVnYXJPdHJvcyhvcGNpb24sIG51bGwpXHJcbiAgICAgICAgKSA6IG51bGx9PC8+XHJcbn1cclxuXHJcbmNvbnN0IG5vbWJyZUNhc2lsbGVybyA9IHtcclxuICAgIEY6ICdmb3JtdWxhcmlvJyxcclxuICAgIEI6ICdibG9xdWUnLFxyXG4gICAgUDogJ3ByZWd1bnRhJyxcclxuICAgIENQOiAnY29uanVudG9wcmVndW50YXMnLFxyXG4gICAgTzogJ29wY2lvbicsXHJcbiAgICBPTTogJ211bHRpcGxlJyxcclxuICAgIEZJTFRSTzogJ2ZpbHRybycsXHJcbiAgICBDT05TOiAnY29uc2lzdGVuY2lhJyxcclxuICAgIEJGOiAnYm90b25mb3JtdWxhcmlvJyxcclxuICAgIFRFWFRPOiAnYWNsYXJhY2lvbnN1cGVyaW9yJyxcclxuICAgIFBNQVRSSVo6ICdwcmVndW50YWVuZm9ybWFkZW1hdHJpeicsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNhc2lsbGVybyhwcm9wczoge1xyXG4gICAgY2FzaWxsZXJvOiBQcmVndW50YSB8IEJsb3F1ZSB8IEZpbHRybyB8IENvbmp1bnRvUHJlZ3VudGFzIHwgQm90b25Gb3JtdWxhcmlvIHwgQ29uc2lzdGVuY2lhIHwgT3BjaW9uTXVsdGlwbGUgfCBUZXh0byB8IFBNYXRyaXosXHJcbiAgICBpZD86IHN0cmluZyxcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPzogJ2xhdGVyYWwnIHwgJ3N1cGVyaW9yJ1xyXG4gICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB8IFJlYWN0LlJlYWN0Tm9kZVtdLFxyXG4gICAgXCJvY3VsdGFyLXNhbHRlYWRhXCI/OiAnU0knIHwgJ05PJyB8ICdJTkhBQklMSVRBUicgfCB1bmRlZmluZWRcclxufSkge1xyXG4gICAgcmV0dXJuIDxkaXZcclxuICAgICAgICBrZXk9e2Ake3Byb3BzLmNhc2lsbGVyby50aXBvY30tJHtwcm9wcy5pZCB8fCBwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtgY2FzaWxsZXJvICR7bm9tYnJlQ2FzaWxsZXJvW3Byb3BzLmNhc2lsbGVyby50aXBvY119YH1cclxuICAgICAgICBpZD17cHJvcHMuaWR9XHJcbiAgICAgICAgc3R5bGU9e3Byb3BzLnN0eWxlfVxyXG4gICAgICAgIGRlc3BsaWVndWUtZW5jYWJlemFkbz17cHJvcHMuY2FzaWxsZXJvLmRlc3BsaWVndWVFbmNhYmV6YWRvID8/IHByb3BzLmRlc3BsaWVndWVFbmNhYmV6YWRvID8/ICdzdXBlcmlvcid9XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17cHJvcHNbXCJvY3VsdGFyLXNhbHRlYWRhXCJdfVxyXG4gICAgPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gUHJlZ3VudGFEZXNwbGllZ3VlKHByb3BzOiB7XHJcbiAgICBwcmVndW50YTogUHJlZ3VudGEsXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICBkZXNwbGllZ3VlRW5jYWJlemFkbzogJ2xhdGVyYWwnIHwgJ3N1cGVyaW9yJyxcclxuICAgIHBhcmFQTWF0cml6PzogdHJ1ZVxyXG59KSB7XHJcbiAgICB2YXIgeyBwcmVndW50YSB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXN0YWRvOiBFc3RhZG9WYXJpYWJsZTtcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhKVxyXG4gICAgfSlcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke3ByZWd1bnRhLmlkX2Nhc2lsbGVyb31gXHJcbiAgICB2YXIgc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fVxyXG4gICAgaWYgKHByZWd1bnRhLmRlc3BsaWVndWUgPT0gJ2dyaWQnKSB7XHJcbiAgICAgICAgc3R5bGUuZGlzcGxheSA9ICdncmlkJztcclxuICAgICAgICBzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zID0gJ3JlcGVhdCgzLDFmciknO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wcy5wYXJhUE1hdHJpeiA/XHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAge2dldExvc01ldGFkYXRvcyhwcmVndW50YSl9XHJcbiAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZWd1bnRhLmNhbGN1bGFkYSA/IHRydWUgOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgIHByZWd1bnRhPXtwcmVndW50YSBhcyB1bmtub3duIGFzIFByZWd1bnRhU2ltcGxlfVxyXG4gICAgICAgICAgICAgICAgZm9yUGs9e3Byb3BzLmZvclBrfVxyXG4gICAgICAgICAgICAgICAgbWluaT17dHJ1ZX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICA8Lz5cclxuICAgICAgICA6IDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICBzdHlsZT17c3R5bGV9XHJcbiAgICAgICAgICAgIG51ZXN0cm8tdGlwb3Zhcj17cHJlZ3VudGEudGlwb3ZhciB8fCBcIm11bHRpcGxlXCJ9XHJcbiAgICAgICAgICAgIG9jdWx0YXItc2FsdGVhZGE9e3ByZWd1bnRhLmRlc3BsaWVndWVPY3VsdGEgPyAocHJlZ3VudGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTyd9XHJcbiAgICAgICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvPXtwcm9wcy5kZXNwbGllZ3VlRW5jYWJlemFkb31cclxuXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICBsZWVyPXtwcmVndW50YS5sZWVyICE9PSBmYWxzZX1cclxuICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW5pZG9cIj57XHJcbiAgICAgICAgICAgICAgICBwcmVndW50YS50aXBvdmFyID09IFwic2lfbm9cIiA/IDxHcmlkIGNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8U2lOb0Rlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvQ29uT3BjaW9uZXM9e3ByZWd1bnRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3BsaWVndWVDb250ZW5pZG89e3Byb3BzLnByZWd1bnRhLmRlc3BsaWVndWVDb250ZW5pZG8gPz8gJ3ZlcnRpY2FsJ31cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9HcmlkPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEudGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8T3BjaW9uZXNEZXNwbGllZ3VlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9Db25PcGNpb25lcz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWVyPXshIXByZWd1bnRhLmxlZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvPXtwcmVndW50YS5kZXNwbGllZ3VlQ29udGVuaWRvID8/ICd2ZXJ0aWNhbCd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ3VudGEudGlwb3ZhciA9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmVndW50YS5jYXNpbGxlcm9zIGFzIChPcGNpb25NdWx0aXBsZSB8IENvbnNpc3RlbmNpYSlbXSkubWFwKChvcGNpb25NdWx0aXBsZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NdWx0aXBsZS50aXBvYyA9PSAnT00nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wY2lvbk11bHRpcGxlRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtvcGNpb25NdWx0aXBsZS5pZF9jYXNpbGxlcm99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25NPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHJlZ3VudGFTaW1wbGU6IFByZWd1bnRhU2ltcGxlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYW1wb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cHJlZ3VudGFTaW1wbGUuY2FsY3VsYWRhID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVndW50YT17cHJlZ3VudGFTaW1wbGV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKShwcmVndW50YSlcclxuICAgICAgICAgICAgfTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBpZS1wcmVndW50YVwiPlxyXG4gICAgICAgICAgICAgICAgPFNhbHRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybz17cHJlZ3VudGF9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZmlqbz17cHJlZ3VudGEudGlwb3ZhciA9PSBcIm9wY2lvbmVzXCIgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWd1bnRhLmNhc2lsbGVyb3Muc29tZShvcGNpb24gPT4gb3BjaW9uLnNhbHRvKSA/IFwicmVzdG8gZGUgbGFzIG9wY2lvbmVzXCIgOiBcInRvZGFzIGxhcyBvcGNpb25lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKSA6IFwiXCJ9XHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gUE1hdHJpekRlc3BsaWVndWUocHJvcHM6IHtcclxuICAgIGNhc2lsbGVybzogUE1hdHJpeixcclxuICAgIGZvclBrOiBGb3JQayxcclxufSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvIH0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBwcmVndW50YS0ke2Nhc2lsbGVyby5pZF9jYXNpbGxlcm99YFxyXG4gICAgY29uc3QgY29scyA9IChjYXNpbGxlcm8uY2FzaWxsZXJvcyBhcyAoT3BjaW9uTXVsdGlwbGUgfCBDb25zaXN0ZW5jaWEpW10pXHJcbiAgICAgICAgLmZpbmQoKG9wY2lvbk11bHRpcGxlKSA9PiBvcGNpb25NdWx0aXBsZS50aXBvYyA9PSAnT00nKT8uY2FzaWxsZXJvc1xyXG4gICAgICAgIC5tYXAoKHByZWd1bnRhKSA9PiBwcmVndW50YS5ub21icmUpO1xyXG4gICAgY29uc3QgdGRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHsgdGV4dEFsaWduOiAnY2VudGVyJywgd2lkdGg6IGNvbHMgPyAoNTUwIC8gKGNvbHMubGVuZ3RoKSkudG9TdHJpbmcoKSArICdweCcgOiAnJyB9O1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm9cclxuICAgICAgICBpZD17aWR9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICAgICAgb2N1bHRhci1zYWx0ZWFkYT17Y2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGEgPyAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nfVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICAgICAgbGVlcj17Y2FzaWxsZXJvLmxlZXIgIT09IGZhbHNlfVxyXG4gICAgICAgICAgICBmb3JQaz17cHJvcHMuZm9yUGt9XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAge2NvbHM/Lm1hcCgoY29sLCBpKSA9PiA8dGgga2V5PXtpfSBzY29wZT1cImNvbFwiIHN0eWxlPXt0ZFN0eWxlfT57Y29sfTwvdGg+KX1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIHsoY2FzaWxsZXJvLmNhc2lsbGVyb3MgYXMgKE9wY2lvbk11bHRpcGxlIHwgQ29uc2lzdGVuY2lhKVtdKS5tYXAoKG9wY2lvbk11bHRpcGxlLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9wY2lvbk11bHRpcGxlLnRpcG9jID09ICdPTScgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57b3BjaW9uTXVsdGlwbGUubm9tYnJlfTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3BjaW9uTXVsdGlwbGUuY2FzaWxsZXJvcy5tYXAoKHByZWd1bnRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gYHByZWd1bnRhLSR7cHJlZ3VudGEuaWRfY2FzaWxsZXJvfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKHByZWd1bnRhIGFzIHVua25vd24gYXMgUHJlZ3VudGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRkIGtleT17aWR9IGlkPXtpZH0+PFByZWd1bnRhRGVzcGxpZWd1ZSBmb3JQaz17cHJvcHMuZm9yUGt9IHByZWd1bnRhPXtwcmVndW50YSBhcyB1bmtub3duIGFzIFByZWd1bnRhfSBkZXNwbGllZ3VlRW5jYWJlemFkbz1cInN1cGVyaW9yXCIgcGFyYVBNYXRyaXo9e3RydWV9IC8+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAvL2xhcyBjb25zaXN0ZW5jaWFzIHB1ZWRlbiBzZXIgaGVybWFuYXMgZGUgT01cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENvbnNpc3RlbmNpYURlc3BsaWVndWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17b3BjaW9uTXVsdGlwbGUuaWRfY2FzaWxsZXJvfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvPXtvcGNpb25NdWx0aXBsZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrPXtwcm9wcy5mb3JQa31cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwaWUtcHJlZ3VudGFcIj48L2Rpdj5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG52YXIgY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvID0gKFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIGZvcm11bGFyaW86IElkRm9ybXVsYXJpb1xyXG4pID0+IHtcclxuICAgIGlmIChoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKSB7XHJcbiAgICAgICAgcmV0dXJuICFoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiYgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYm90b25lc0RlbEZvcm11bGFyaW8ocjogUmVzcHVlc3RhcywgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCBlc3RydWN0dXJhOiBFc3RydWN0dXJhLCBmb3JQa1BhZHJlOiBGb3JQaywgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0pOiBIdG1sVGFnPEhUTUxEaXZFbGVtZW50PiB7XHJcbiAgICB2YXIgZm9ybXNWaXZpZW5kYSA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKTtcclxuICAgIHZhciB1YURlZiA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcyA9IChsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykpLmFycmF5KCk7XHJcbiAgICB2YXIgeCA9IGxpa2VBcih1YURlZi5oaWphcykuZmlsdGVyKHVhSGlqYSA9PlxyXG4gICAgICAgIC8vZGVzY2FydG8gdWFzIHF1ZSBubyBlc3TDqW4gZW4gbmluZ3VuIGZvcm1cclxuICAgICAgICBhcnJheUVzdHJ1Y3R1cmFGb3JtdWxhcmlvcy5maWx0ZXIoKGluZm9Gb3JtdWxhcmlvKSA9PlxyXG4gICAgICAgICAgICBpbmZvRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamE/LnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MuaWRfY2FzaWxsZXJvIGFzIElkRm9ybXVsYXJpbylcclxuICAgICAgICApLmxlbmd0aCA+IDBcclxuICAgICkubWFwKHVhSGlqYSA9PiAoXHJcbiAgICAgICAgdWFIaWphID09IG51bGwgPyBudWxsIDpcclxuICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ3VhLWhpamFzJyB9LCBbXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih1YUhpamEudW5pZGFkX2FuYWxpc2lzKSxcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KFxyXG4gICAgICAgICAgICAgICAgICAgIGxpa2VBcihyW3VhSGlqYS51bmlkYWRfYW5hbGlzaXNdIHx8IFtdKS5tYXAoKHJlc3B1ZXN0YXNIaWphLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIoaSkgKyAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQa0hpamFQYXJjaWFsID0geyAuLi5mb3JQa1BhZHJlLCBbdWFIaWphLnBrX2FncmVnYWRhXTogbnVtIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gPyBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUGFkcmVbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sLmRpdih7IGNsYXNzOiAnbnVtZXJhZG9yLXVhJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAnYm90b25lcy11YScgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdudW1lcm8tdWEnIH0sIG51bS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5saWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmb3JtRGVmID0+IGZvcm1EZWYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFIaWphLnVuaWRhZF9hbmFsaXNpcyAmJiBmb3Jtc1ZpdmllbmRhLmluY2x1ZGVzKGZvcm1EZWYuY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoX2Zvcm1EZWYsIGZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JQayA9IHsgLi4uZm9yUGtIaWphUGFyY2lhbCwgZm9ybXVsYXJpbyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrRm9ybSA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRiYWNrRm9ybSA/IGh0bWwuZGl2KHt9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHRtbC5idXR0b24oKHVhSGlqYSEpLnBrX2FncmVnYWRhK1wiIG9rOiBcIisoTnVtYmVyKGkpKzEpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogY2FsY3VsYXJBY3R1YWxCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBudW0sIG51bGwsIGZvcm11bGFyaW8sIHIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBudW0sIGZvcm11bGFyaW8sIHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkZXNwbGllZ3VlT2N1bHRhOiBmYWxzZSwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogJycsIG5vbWJyZTogZm9ybXVsYXJpbywgYWNsYXJhY2lvbjogbnVsbCwgc2FsdG86IGZvcm11bGFyaW8gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGtQYWRyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5jYXNpbGxlcm9zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHggPT4geCA9PSBudWxsID8gbnVsbCA6IHgpLnJldmVyc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGJvdG9uZXNEZWxGb3JtdWxhcmlvKHJlc3B1ZXN0YXNIaWphLCB1YUhpamEudW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQa0hpamFQYXJjaWFsLCBmZWVkYmFja0FsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpLm1hcCh4ID0+IHggPT0gbnVsbCA/IG51bGwgOiB4KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgKSkuYXJyYXkoKS5tYXAoeCA9PiB4ID09IG51bGwgPyBudWxsIDogeCk7XHJcbiAgICByZXR1cm4gaHRtbC5kaXYoLyp7c3R5bGU6J2Rpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93J30sKi94KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVGV4dG9EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogVGV4dG8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgbW9kb0Rlc3BsaWVndWUgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIGlkID0gYHRleHRvLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oeyBpZCwgc3R5bGU6ICdkaXNwbGF5JywgZnVuOiAocjogUmVzcHVlc3RhcykgPT4gaGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyAnYmxvY2snIDogJ25vbmUnIH0pXHJcbiAgICB2YXIgZXNSZXN1bWVuRm9ybXVsYXJpbyA9IGNhc2lsbGVyby5jYXNpbGxlcm8gPT0gJ1Jlc0ZvcicgYXMgSWRDYXNpbGxlcm87IC8vIFRPRE86IENhbWJpYSBlc3RvIHF1ZSBlc3TDoSBqYXJjb2RlYWRvLlxyXG4gICAgaWYgKGVzUmVzdW1lbkZvcm11bGFyaW8pIHtcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyByZXNwdWVzdGFzIHNvbiByZXNwdWVzdGFzUmFpeiBwb3JxdWUgUmVzRm9yIGVzdMOhIGVuIGVsIGZvcm0gcHBhbFxyXG4gICAgICAgICAgICAgICAgaWYgKHJbJ3Jlc3VtZW5Fc3RhZG8nXSBhcyBSZXN1bWVuRXN0YWRvID09ICd2YWNpbycpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by50ZXh0Q29udGVudCA9IFwicmVsZXZhbWllbnRvIHNpbiBlbXBlemFyXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gZW1wZXphZG9cIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMgfSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcztcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50by5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmFwcGVuZENoaWxkKGJvdG9uZXNEZWxGb3JtdWxhcmlvKHIsIHVuaWRhZF9hbmFsaXNpcywgZXN0cnVjdHVyYSwgZm9yUGssIGZlZWRiYWNrQWxsKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgdmFyIGlyID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyKSA9PiB7XHJcbiAgICAgICAgLy8gdmFyIG51ZXZhRm9yUGs9ey4uLmZvclBrLCBmb3JtdWxhcmlvOmlkRm9ybXVsYXJpb0Rlc3Rpbm99O1xyXG4gICAgICAgIC8vIG51ZXZhRm9yUGtbbnVldm9DYW1wb1BrXSA9IGRlZkJvdG9uLm51bVxyXG4gICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBkZWZCb3Rvbi5mb3JQayB9KTtcclxuICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQazogZGVmQm90b24uZm9yUGssIGFwaWxhclZ1ZWx0YTogdHJ1ZSB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtgJHtpZH0tZXh0ZXJub2B9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtjYXNpbGxlcm99XHJcbiAgICA+XHJcbiAgICAgICAgPEVuY2FiZXphZG9EZXNwbGllZ3VlIGNhc2lsbGVybz17Y2FzaWxsZXJvfSBsZWVyPXtmYWxzZX0gZm9yUGs9e2ZvclBrfSAvPlxyXG4gICAgICAgIDxkaXYgaWQ9e2lkfSBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX0+PC9kaXY+XHJcbiAgICAgICAge2VzUmVzdW1lbkZvcm11bGFyaW8gP1xyXG4gICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9XCJib3Rvbi1pci1yZXN1bWVuLWZvcm11bGFyaW9cIiBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICAgICAgOiBudWxsfVxyXG5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBGaWx0cm9EZXNwbGllZ3VlKHByb3BzOiB7IGZpbHRybzogRmlsdHJvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgZmlsdHJvIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17ZmlsdHJvfT5cclxuICAgICAgICA8RGVzcGxpZWd1ZUVuY2FiZXphZG8gY2FzaWxsZXJvPXtmaWx0cm99IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gQ29uc2lzdGVuY2lhRGVzcGxpZWd1ZShwcm9wczogeyBjYXNpbGxlcm86IENvbnNpc3RlbmNpYSwgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgY29uc2lzdGVuY2lhLSR7Y2FzaWxsZXJvLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oeyBpZCwgc3R5bGU6ICdkaXNwbGF5JywgZnVuOiAocjogUmVzcHVlc3RhcykgPT4gaGFiaWxpdGFkb3IocikgfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyAnYmxvY2snIDogJ25vbmUnIH0pXHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtpZH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxudHlwZSBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyID1cclxuICAgICh7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBib29sZWFuIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIGVzQWdyZWdhcjogdHJ1ZSB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGZhbHNlLCBlc0NvbmZpcm1hcjogdHJ1ZSB9IHxcclxuICAgIHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGZhbHNlLCBwZXJtaXRlQm9ycmFyOiBib29sZWFuIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogZmFsc2UsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBib29sZWFuLCB1bmljbzogdHJ1ZSB9KVxyXG4gICAgJiB7IGVzQ29uZmlybWFyPzogdHJ1ZSwgZXNBZ3JlZ2FyPzogdHJ1ZSwgcGVybWl0ZUJvcnJhcj86IGJvb2xlYW4sIHBlcm1pdGVCb3JyYXJHYWJpbmV0ZT86IGJvb2xlYW4sIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZCwgZXN0YWRvQm90b24/OiBzdHJpbmcgfTtcclxuXHJcblxyXG52YXIgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbiA9IChcclxuICAgIGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLFxyXG4gICAgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgY2FzaWxsZXJvOiB7IGRlc3BsaWVndWVPY3VsdGE/OiBib29sZWFuIHwgbnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcl9qcz86IHN0cmluZywgYWNsYXJhY2lvbjogc3RyaW5nIHwgbnVsbCwgZXhwcmVzaW9uX2hhYmlsaXRhcj86IHN0cmluZywgbm9tYnJlPzogc3RyaW5nLCBzYWx0bzogc3RyaW5nIHwgbnVsbCwgZXNwZWNpYWw/OiBhbnkgfSxcclxuICAgIGZvclBrUGFkcmU6IEZvclBrLFxyXG4gICAgaWRCdXR0b246IHN0cmluZyxcclxuICAgIGZvcm11bGFyaW9BQWJyaXI6IEZvcm11bGFyaW8sXHJcbiAgICBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8/OiAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrKSA9PiB2b2lkXHJcbikgPT4ge1xyXG4gICAgdmFyIGZvclBrOiBGb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgdmFyIHN1Zmlqb0lkRWxlbWVudG8gPSB0b1BsYWluRm9yUGsoZm9yUGspICsgKGRlZkJvdG9uLmVzQ29uZmlybWFyID8gJy1saXN0bycgOiAnJyk7XHJcbiAgICB2YXIgaWQgPSBgZGl2LWJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWA7XHJcbiAgICB2YXIgZXN0YWRvID0gZmVlZGJhY2tGb3JtLnJlc3VtZW47XHJcbiAgICByZXR1cm4gaHRtbC50cih7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgY2xhc3M6IFwic2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvXCIsXHJcbiAgICAgICAgJGF0dHJzOiB7XHJcbiAgICAgICAgICAgIFwibnVlc3Ryby12YWxpZGF0b3JcIjogZGVmQm90b24uYWN0dWFsID8gJ2FjdHVhbCcgOiBkZWZCb3Rvbi5wcmV2aW8gPyAndmFsaWRhJyA6IChkZWZCb3Rvbi5lc3RhZG9Cb3RvbiB8fCAndG9kYXZpYV9ubycpLFxyXG4gICAgICAgICAgICBcIm9jdWx0YXItc2FsdGVhZGFcIjogY2FzaWxsZXJvLmRlc3BsaWVndWVPY3VsdGEgPyAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyAnSU5IQUJJTElUQVInIDogJ1NJJykgOiAnTk8nLFxyXG4gICAgICAgICAgICBcInRpZW5lLXZhbG9yXCI6IFwiTk9cIixcclxuICAgICAgICAgICAgXCJkZWYtYnV0dG9uXCI6IEpTT04uc3RyaW5naWZ5KGRlZkJvdG9uKVxyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbiA/XHJcbiAgICAgICAgICAgIGh0bWwudGQoeyBjbGFzczogXCJhY2xhcmFjaW9uXCIgfSwgW2JyZWFrZWFibGVUZXh0KGNhc2lsbGVyby5hY2xhcmFjaW9uKV0pXHJcbiAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICBodG1sLnRkKHtcclxuICAgICAgICAgICAgY29sc3BhbjogKGRlZkJvdG9uLmVzQWdyZWdhciB8fCBkZWZCb3Rvbi5lc0NvbmZpcm1hcikgP1xyXG4gICAgICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbi5sZW5ndGggPz8gMSkgKyAoY2FzaWxsZXJvLmFjbGFyYWNpb24gPyAwIDogMSlcclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAvLyBpZDpgdmFyLSR7aWRWYXJpYWJsZX1gLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudDogZGVmQm90b24uYWN0dWFsID8gXCJjb250YWluZWRcIiA6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkZWZCb3Rvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcImluaGVyaXRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24uZXNDb25maXJtYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZkJvdG9uLm51bSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLnNhbHRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsaXN0bywgYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogZGVmQm90b24ubnVtIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiAxIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IGRlZkJvdG9uLm51bSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZEJ1dHRvbikhIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJywgSlNPTi5zdHJpbmdpZnkoZGVmQm90b24pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICRhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwicmVzdW1lbi1lc3RhZG9cIjogZXN0YWRvICE9ICd2YWNpbycgPyBlc3RhZG8gOiBkZWZCb3Rvbi5hY3R1YWwgPyAnYWN0dWFsJyA6IGRlZkJvdG9uLnByZXZpbyA/IGVzdGFkbyA6IChkZWZCb3Rvbi5lc3RhZG9Cb3RvbiB8fCAndG9kYXZpYV9ubycpLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLCBjaGlsZHJlbjogW1xyXG4gICAgICAgICAgICAgICAgICAgIChkZWZCb3Rvbi5lc0FncmVnYXIgPyAnYWdyZWdhcicgOiBkZWZCb3Rvbi5lc0NvbmZpcm1hciA/ICdMaXN0bycgOiBjYXNpbGxlcm8ubm9tYnJlICsgJyAnICsgKGRlZkJvdG9uLm51bSB8fCAnJykpLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHsgZDogKGRlZkJvdG9uLmVzQWdyZWdhciA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguQWRkIDogZGVmQm90b24uZXNDb25maXJtYXIgPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkNoZWNrIDogY2FzaWxsZXJvLnNhbHRvID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5Gb3J3YXJkIDogbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5FeGl0VG9BcHApLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6ICdjdXJyZW50Q29sb3InIH0pIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyIHx8IGRlZkJvdG9uLnBlcm1pdGVCb3JyYXJHYWJpbmV0ZSA/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYm90b24tYm9ycmFyLXVhLXZhY2lhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBtYXJnaW5MZWZ0OiAnOHB4JyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ucGVybWl0ZUJvcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ubnVtID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyR2FiaW5ldGUgJiYgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8oZGVmQm90b24sIGZvclBrUGFkcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogbnVsbCksXHJcbiAgICAgICAgICAgIChkZWZCb3Rvbi5lc0NvbmZpcm1hciAmJiBjYXNpbGxlcm8uc2FsdG8gJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbJyRCLkY6JyArIChjYXNpbGxlcm8uc2FsdG8uc3Vic3RyaW5nKDAsIDIpID09ICdGOicgPyBjYXNpbGxlcm8uc2FsdG8uc2xpY2UoMikgOiBjYXNpbGxlcm8uc2FsdG8pIGFzIElkVmFyaWFibGVdICE9IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgQnV0dG9uMih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJvdG9uLWRlc2hhY2VyLWxpc3RvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyBtYXJnaW5MZWZ0OiAnOHB4JyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRGVzaGFjZXIgTGlzdG9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IG1hcmdpbkxlZnQ6ICc0cHgnLCBoZWlnaHQ6ICcyMHB4JywgdmVydGljYWxBbGlnbjogJ21pZGRsZScgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5wYXRoKHsgZDogbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5EZWxldGVGb3JldmVyLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6ICdjdXJyZW50Q29sb3InIH0pIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIChkZWZCb3Rvbi5udW0gIT09IGZhbHNlICYmICFkZWZCb3Rvbi5lc0FncmVnYXIgJiYgIWRlZkJvdG9uLmVzQ29uZmlybWFyID9cclxuICAgICAgICAgICAgKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbiA/PyBbLypkZWZCb3Rvbi5udW0udG9TdHJpbmcoKSovXSkubWFwKFxyXG4gICAgICAgICAgICAgICAgKGNhbXBvOiBzdHJpbmcpID0+IGh0bWwudGQoKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXVtkZWZCb3Rvbi5udW0gLSAxXVtjYW1wbyBhcyBJZFZhcmlhYmxlXSA/PyAnJykudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgLy8gaHRtbC5kaXYoe2NsYXNzOidpbmxpbmUtZGlhbG9nJywgJGF0dHJzOntcImlubGluZS1kaWFsb2ctb3BlblwiOiBjb25maXJtYXJGb3J6YXJJciA9PSBkZWZCb3Rvbi5udW0/J3Zpc2libGUnOidoaWRkZW4nfX0sWyAgICAgICAgICAgICAgICBdKVxyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICB7ZGVmQm90b24uZXNBZ3JlZ2FyPzw+IDxzcGFuPiAgPC9zcGFuPiA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+PElDT04uQ2hlY2svPjwvQnV0dG9uPjwvPjpudWxsfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICovXHJcbiAgICBdKS5jcmVhdGUoKVxyXG59XHJcblxyXG52YXIgYnVzY2FySG5vc0Zvcm11bGFyaW8gPSAoaWRGb3JtdWxhcmlvRGVzdGlubzogSWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB1YSA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpXHJcbiAgICAgICAgLmZpbHRlcigoaW5mb0Zvcm11bGFyaW86IEluZm9Gb3JtdWxhcmlvLCBfaWRGb3JtOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhXHJcbiAgICAgICAgKS5tYXAoKF9pbmZvRm9ybXVsYXJpbzogSW5mb0Zvcm11bGFyaW8sIGlkRm9ybTogSWRGb3JtdWxhcmlvKSA9PlxyXG4gICAgICAgICAgICBpZEZvcm1cclxuICAgICAgICApLmFycmF5KClcclxufVxyXG5cclxudmFyIGNoZWNrRm9ybXNWYWNpb3MgPSAoZm9ybXM6IElkRm9ybXVsYXJpb1tdLCBmZWVkYmFja0FsbDoge1xyXG4gICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbn0sIGZvclBrOiBGb3JQaykgPT4ge1xyXG4gICAgcmV0dXJuIGZvcm1zLmZpbHRlcigoZm9ybTogSWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgbGV0IG15Zm9yUGsgPSB7IC4uLmZvclBrLCBmb3JtdWxhcmlvOiBmb3JtIH07XHJcbiAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKG15Zm9yUGspXTtcclxuICAgICAgICByZXR1cm4gZmVlZGJhY2sucmVzdW1lbiAhPSAndmFjaW8nXHJcbiAgICB9KS5sZW5ndGggPT0gMFxyXG59XHJcblxyXG5mdW5jdGlvbiBCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogQm90b25Gb3JtdWxhcmlvLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG9wY2lvbmVzIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciB7IGxpc3RvOiBCRl9saXN0bywgYWdyZWdhcjogQkZfYWdyZWdhciwgaWRGb3JtdWxhcmlvOiBpZEZvcm11bGFyaW9EZXN0aW5vIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciB7IGZvcm11bGFyaW9BQWJyaXIgfSA9IHVzZVNlbGVjdG9yKChfc3RhdGU6IENhc29TdGF0ZSkgPT4gKHtcclxuICAgICAgICBmb3JtdWxhcmlvQUFicmlyOiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dLmNhc2lsbGVyb3MsXHJcbiAgICB9KSk7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQayk7XHJcbiAgICAvKlxyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkOmBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YCwgXHJcbiAgICAgICAgYXR0cjonZXN0YS1pbmhhYmlsaXRhZGEnLCBcclxuICAgICAgICAvLyBmdW46IChyOlJlc3B1ZXN0YXMpPT5oYWJpbGl0YWRvcihyKT8nU0knOidOTydcclxuICAgICAgICBmdW46IChfcjpSZXNwdWVzdGFzKT0+J05PJ1xyXG4gICAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50bzxIVE1MQnV0dG9uRWxlbWVudD4oe1xyXG4gICAgICAgIGlkOmBib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBwcm9wOidkaXNhYmxlZCcsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PiFoYWJpbGl0YWRvcihyKVxyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT5mYWxzZVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIFtjb25maXJtYXJGb3J6YXJJciwgc2V0Q29uZmlybWFyRm9yemFySXJdID0gdXNlU3RhdGU8RGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciB8IGZhbHNlIHwgbnVsbD4obnVsbCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hY2lvbkJvcnJhZG8sIHNldENvbmZpcm1hY2lvbkJvcnJhZG9dID0gdXNlU3RhdGU8e2RlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaywgZGF0b3M6IGFueX0gfCBudWxsPihudWxsKTtcclxuICAgIHZhciBbZnJhc2VCb3JyYWRvLCBzZXRGcmFzZUJvcnJhZG9dID0gdXNlU3RhdGUoJycpO1xyXG4gICAgdmFyIFtlcnJvckZyYXNlQm9ycmFkbywgc2V0RXJyb3JGcmFzZUJvcnJhZG9dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgdmFyIHBlcm1pdGVCb3JyYXJHYWJpbmV0ZSA9IGdldERhdG9zQnlQYXNzKCkucGVybWl0ZUJvcnJhckVsZW1lbnRvc1VBID8/IGZhbHNlO1xyXG4gICAgdmFyIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbyA9IChkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgZm9yUGtQYWRyZTogRm9yUGspID0+IHtcclxuICAgICAgICBjb25zdCB7cmVzcHVlc3Rhc30gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtQYWRyZSlcclxuICAgICAgICB2YXIgZGF0b3NIaWpvcyA9IHJlc3B1ZXN0YXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdWyhkZWZCb3Rvbi5udW0gfHwgMSkgLSAxXTtcclxuICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKHsgZGVmQm90b24sIGZvclBrUGFkcmUsIGRhdG9zOiBkYXRvc0hpam9zIH0pO1xyXG4gICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7XHJcbiAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpO1xyXG4gICAgfTtcclxuICAgIHZhciBtdWx0aXBsZUZvcm11bGFyaW9zID0gZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXMgIT0gcHJvcHMuZm9ybXVsYXJpby51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICB2YXIgbnVldm9DYW1wb1BrID0gZGVmT3BlcmF0aXZvLmRlZlVBW2Zvcm11bGFyaW9BQWJyaXIudW5pZGFkX2FuYWxpc2lzXS5waztcclxuICAgIC8vIHZhciB2YXJfbmFtZT0nJEIuJytjYXNpbGxlcm8uc2FsdG87IC8vb3JpZ2luYWxcclxuICAgIHZhciBpZFNlY2Npb24gPSBgc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvLSR7QkZfbGlzdG99YDtcclxuICAgIHZhciBpZEJ1dHRvbiA9IGBzcGVjaWFsLWJ1dHRvbi0ke2lkU2VjY2lvbn1gO1xyXG4gICAgdmFyIHZhcl9uYW1lX3JlZ2lzdHJvID0gbXVsdGlwbGVGb3JtdWxhcmlvcyA/IEJGX2FncmVnYXIgOiBCRl9saXN0bztcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxEaXZFbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6IGlkU2VjY2lvbixcclxuICAgICAgICB2YXJpYWJsZTogdmFyX25hbWVfcmVnaXN0cm8sXHJcbiAgICAgICAgZm9yUGs6IGZvclBrLFxyXG4gICAgICAgIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IChyZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcywgZmVlZGJhY2tSb3c6IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBkaXY6IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDoge1xyXG4gICAgICAgICAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBlc3RhZG9fbGlzdG8gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9saXN0b10/LmVzdGFkbyB8fCAndmFsaWRhJztcclxuICAgICAgICAgICAgICAgIHZhciBlc3RhZG9fYWdyZWdhciA9IG11bHRpcGxlRm9ybXVsYXJpb3MgPyAoZmVlZGJhY2tSb3cuZmVlZGJhY2tbQkZfYWdyZWdhcl0/LmVzdGFkbyB8fCAndmFsaWRhJykgOiAndmFsaWRhJztcclxuICAgICAgICAgICAgICAgIHZhciBlc3RhZG9fZ2VuZXJhbCA9IGVzdGFkb19hZ3JlZ2FyICE9PSAndmFsaWRhJyA/IGVzdGFkb19hZ3JlZ2FyIDogZXN0YWRvX2xpc3RvO1xyXG4gICAgICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGRpdiwgJ251ZXN0cm8tdmFsaWRhdG9yJywgZXN0YWRvX2dlbmVyYWwpO1xyXG4gICAgICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGRpdiwgJ3RpZW5lLXZhbG9yJywgZXN0YWRvX2dlbmVyYWwgPT09ICd2YWxpZGEnID8gJ3ZhbGlkbycgOiAnTk8nKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdGFEZUJvdG9uZXNBYnJpcjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcltdID0gW107XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgZXNWYXJBY3R1YWwgPSBmZWVkYmFja1Jvdy5hY3R1YWwgPT0gJyRCLkY6JytjYXNpbGxlcm8uc2FsdG87ICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICB2YXIgZXNWYXJBY3R1YWwgPSAhIWZlZWRiYWNrUm93LmFjdHVhbD8uc3RhcnRzV2l0aChCRl9saXN0byk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQm90b25Gb3JtdWxhcmlvRGVzcGxpZWd1ZSBlc1ZhckFjdHVhbCAnICtlc1ZhckFjdHVhbCAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChtdWx0aXBsZUZvcm11bGFyaW9zICYmIGNhc2lsbGVyby5zYWx0byAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIGxldCBkZWZGb3JtdWxhcmlvOkluZm9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1snRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZEZvcm11bGFyaW9dOyAgICAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVmRm9ybXVsYXJpbzogSW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb0Rlc3Rpbm9dO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZVQSA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25qdW50byA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2RlZkZvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMhXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FudGlkYWRFc3BlcmFkYSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1BY3R1YWw6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1snJEIuRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlXS5lc3RhZG8gICAvL29yaWdpbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVzdGFkb0RlbEJvdG9uID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbQkZfbGlzdG9dLmVzdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzdGFkb0RlbEJvdG9uICcgK2VzdGFkb0RlbEJvdG9uICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gPyBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pXSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpciA9IGxpa2VBcihjb25qdW50bykubWFwKChfLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW06IG51bWJlciA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShpLCBjb25qdW50bykgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGsgPSB7IC4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTogbnVtIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtSG5vcyA9IGJ1c2Nhckhub3NGb3JtdWxhcmlvKGlkRm9ybXVsYXJpb0Rlc3Rpbm8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkYmFjayA9IGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtQWN0dWFsID09IG51bGwgJiYgZmVlZGJhY2sucmVzdW1lbiA9PSBcInZhY2lvXCIgJiYgZXN0YWRvRGVsQm90b24gPT0gJ3ZhbGlkYScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFjdHVhbCA9IG51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVuOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVtQWN0dWFsLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IG51bUFjdHVhbCA9PSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhcjogbGlrZUFyKGNvbmp1bnRvKS5hcnJheSgpLmxlbmd0aCA9PSBOdW1iZXIoaSkgKyAxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3Jtc1ZhY2lvcyhmb3JtSG5vcywgZmVlZGJhY2tBbGwsIGZvclBrKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGlkRm9ybXVsYXJpb0Rlc3Rpbm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhckdhYmluZXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgaWRGb3JtdWxhcmlvRGVzdGlubywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0YWRvQm90b246IGVzdGFkb19nZW5lcmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KS5hcnJheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnVlIC8qXCJwdWVkZSBhZ3JlZ2FyIC8vVE9ETyBWRVIgRVNUT1wiKi8gJiYgKGNvbmp1bnRvIGluc3RhbmNlb2YgQXJyYXkgfHwgY29uanVudG8gPT0gbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51ZXZvVmFsb3JQayA9IChjb25qdW50byA9PSBudWxsID8gMCA6IGNvbmp1bnRvLmxlbmd0aCkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGsgPSB7IC4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW9EZXN0aW5vLCBbbnVldm9DYW1wb1BrXTogbnVldm9WYWxvclBrIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0b1ByZXNpb25hZG8gPSByZXNwdWVzdGFzQXVtZW50YWRhc1tCRl9saXN0b10gIT0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlYmVBZ3JlZ2FyT2xpc3RvID0gbnVtQWN0dWFsID09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbnRpZGFkRXNwZXJhZGEgPT0gbnVsbCB8fCBjYW50aWRhZEVzcGVyYWRhICE9IChjb25qdW50byAhPSBudWxsICYmIGNvbmp1bnRvLmxlbmd0aCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAhbGlzdG9QcmVzaW9uYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmIChlc3RhZG9EZWxCb3RvbiA9PSAndmFsaWRhJyB8fCBlc1ZhckFjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTogbnVldm9WYWxvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNBZ3JlZ2FyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBkZWJlQWdyZWdhck9saXN0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RhZG9Cb3RvbjogZXN0YWRvX2dlbmVyYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTogbnVldm9WYWxvclBrIC0gMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzQ29uZmlybWFyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBkZWJlQWdyZWdhck9saXN0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGQWdyZWdhckxpc3RvKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RhZG9Cb3RvbjogZXN0YWRvX2dlbmVyYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9yUGsgPSB7IC4uLnByb3BzLmZvclBrLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW9EZXN0aW5vIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVzUHJldmlvVW5pY28gPSBlc3RhZG9fZ2VuZXJhbCA9PSAndmFsaWRhJyB8fCAoZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV0/LnJlc3VtZW4gIT0gbnVsbCAmJiBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXT8ucmVzdW1lbiAhPSAndmFjaW8nKTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gW3sgZm9yUGssIG51bTogZmFsc2UsIHVuaWNvOiB0cnVlLCBhY3R1YWw6IGVzVmFyQWN0dWFsLCBwcmV2aW86IGVzUHJldmlvVW5pY28sIGVzdGFkb0JvdG9uOiBlc3RhZG9fZ2VuZXJhbCB9XVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHRvZG9zTG9zQm90b25lcyA9IGxpc3RhRGVCb3RvbmVzQWJyaXIubWFwKGRlZkJvdG9uID0+XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b25Gb3JtdWxhcmlvQ29uUmVzdW1lbihkZWZCb3RvbiwgZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGRlZkJvdG9uLmZvclBrKV0gPz8geyByZXN1bWVuOiAndmFjaW8nIH0sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8sIHByb3BzLmZvclBrLCBpZEJ1dHRvbiwgZm9ybXVsYXJpb0FBYnJpciwgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgbGV0IG5vbWJyZXNDYW1wb3NSZXN1bWVuID0gbGlrZUFyKChjYXNpbGxlcm8uZXNwZWNpYWw/LmNhbXBvc1Jlc3VtZW4gfHwgW10pKS5hcnJheSgpLm1hcChjID0+IGMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGh0bWxTZWNjaW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRTZWNjaW9uKSE7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaHRtbFNlY2Npb24uYXBwZW5kQ2hpbGQoaHRtbC50YWJsZSh7IGNsYXNzOiBgdGFibGUgdGFibGUtc3RyaXBlZCAke25vbWJyZXNDYW1wb3NSZXN1bWVuLmxlbmd0aCA/ICd3LWF1dG8nIDogJyd9YCB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC50aGVhZChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwudHIoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLmFjbGFyYWNpb24gPyBodG1sLnRoKCkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC50aChjYXNpbGxlcm8ubm9tYnJlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5vbWJyZXNDYW1wb3NSZXN1bWVuLm1hcCgobm9tYnJlQ2FtcG8pID0+IGh0bWwudGgobm9tYnJlQ2FtcG8gYXMgc3RyaW5nKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC50Ym9keShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvZG9zTG9zQm90b25lc1xyXG4gICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlbnRyYSBhbCBjYXRjaFwiKVxyXG4gICAgICAgICAgICAgICAgZGl2LnRleHRDb250ZW50ID0gJ2VzdG8sIEZBTEzDiSAnICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgaXIgPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpID0+IHtcclxuICAgICAgICBpZiAoIWNhc2lsbGVyby5zYWx0bykge1xyXG4gICAgICAgICAgICBvcGNpb25lcy5tb2RvRGlyZWN0byA/XHJcbiAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIG51ZXZhRm9yUGsgPSB7IC4uLmZvclBrLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW9EZXN0aW5vIH07XHJcbiAgICAgICAgICAgIHZhciB7IGxpc3RvOiBCRl9saXN0bywgYWdyZWdhcjogQkZfYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICBpZiAobXVsdGlwbGVGb3JtdWxhcmlvcykge1xyXG4gICAgICAgICAgICAgICAgKG51ZXZhRm9yUGsgYXMgYW55KVtudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24uZXNBZ3JlZ2FyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbywgeyBmb3JQazogbnVldmFGb3JQayB9KTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9hZ3JlZ2FyLCByZXNwdWVzdGE6IDEgYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBudWV2YUZvclBrIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIGFicm8gdW5vIGV4aXN0ZW50ZSwgdGFtYmnDqW4gcmVzZXRlbyBlbCBsaXN0byBwYXJhIGZvcnphciBxdWUgdnVlbHZhbiBhIGFwcmV0YXJsbyBzaSBjYW1iaWFuIGFsZ29cclxuICAgICAgICAgICAgICAgICAgICAvL2Rpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2xpc3RvLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2xpc3RvLCByZXNwdWVzdGE6IDEgYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGs6IG51ZXZhRm9yUGssIGFwaWxhclZ1ZWx0YTogdHJ1ZSB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maXJtYXJGb3J6YXJJcikgeyBzZXRDb25maXJtYXJGb3J6YXJJcihmYWxzZSkgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGNhc2lsbGVybz17Y2FzaWxsZXJvfT5cclxuICAgICAgICB7bXVsdGlwbGVGb3JtdWxhcmlvcyAmJiA8c3BhbiBpZD17J3Zhci0nICsgQkZfYWdyZWdhcn0gc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIG1hcmdpblRvcDogJy02MHB4JyB9fT48L3NwYW4+fVxyXG4gICAgICAgIDxzcGFuIGlkPXsndmFyLScgKyBCRl9saXN0b30gc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIG1hcmdpblRvcDogJy02MHB4JyB9fT48L3NwYW4+XHJcbiAgICAgICAgPGRpdiBpZD17aWRTZWNjaW9ufT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cInNwZWNpYWwtYnV0dG9uXCIgaWQ9e2lkQnV0dG9ufVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlyKEpTT04ucGFyc2UoKGV2ZW50LnRhcmdldCEgYXMgdW5rbm93biBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkZWYtYnV0dG9uJykhKSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+aXIgKGludGVybm8pPC9CdXR0b24+XHJcbiAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIlxyXG4gICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hckZvcnphcklyfVxyXG4gICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibnVlc3Ryby1kaWFsb2dvXCI+XHJcbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5ObyBzZSBwdWVkZSBhdmFuemFyIGFsIHNpZ3VpZW50ZSBmb3JtdWxhcmlvLjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gdGVybWluw7MgZGUgY29udGVzdGFyIGxhcyBwcmVndW50YXMgY29ycmVzcG9uZGllbnRlczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlF1aXrDoXMgbm8gY29ycmVzcG9uZGUgZW4gYmFzZSBhIGxhcyByZXNwdWVzdGFzIG9idGVuaWRhczwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiBjb25maXJtYXJGb3J6YXJJciAmJiBpcihjb25maXJtYXJGb3J6YXJJcil9PmZvcnphcjwvQnV0dG9uPlxyXG4gICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKSA9PiBzZXRDb25maXJtYXJGb3J6YXJJcihudWxsKX0+RW50ZW5kaWRvPC9CdXR0b24+XHJcbiAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAge2NvbmZpcm1hY2lvbkJvcnJhZG8gJiYgKFxyXG4gICAgICAgICAgICA8RGlhbG9nIG9wZW49e3RydWV9IG9uQ2xvc2U9eygpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpOyBcclxuICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbygnJyk7IFxyXG4gICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpOyBcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGU+QWR2ZXJ0ZW5jaWE6IFNlIHBlcmRlcsOhbiBkYXRvczwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtgRXN0w6EgcG9yIGJvcnJhciBlbCBmb3JtdWxhcmlvICR7Y29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5mb3JQay5mb3JtdWxhcmlvfSAoJHtlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2VzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbY29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5mb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc10ucGtfYWdyZWdhZGF9OiAke2NvbmZpcm1hY2lvbkJvcnJhZG8uZGVmQm90b24ubnVtfSkuIExvcyBkYXRvcyBkZWwgbWlzbW8geSB0b2RvcyBzdXMgcmVnaXN0cm9zIGFzb2NpYWRvcyBzZSBwZXJkZXLDoW4uIMK/RGVzZWEgY29udGludWFyP2B9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzIwcHgnLCBtYXJnaW5Cb3R0b206ICcyMHB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYSBjb25maXJtYXIgZWwgYm9ycmFkbywgZXNjcmliYSBsYSBmcmFzZSA8c3Ryb25nPlwiZm9yemFyIGJvcnJhZG9cIjwvc3Ryb25nPiBhIGNvbnRpbnVhY2nDs246XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaW5wdXQtZm9yemFyLWJvcnJhZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmcmFzZUJvcnJhZG99IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZyYXNlQm9ycmFkbyhlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3dpZHRoOiAnMTAwJScsIHBhZGRpbmc6ICc4cHgnLCBib3JkZXI6IGVycm9yRnJhc2VCb3JyYWRvID8gJzFweCBzb2xpZCByZWQnIDogJzFweCBzb2xpZCAjY2NjJywgYm9yZGVyUmFkaXVzOiAnNHB4J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZvcnphciBib3JyYWRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtlcnJvckZyYXNlQm9ycmFkbyAmJiA8ZGl2IHN0eWxlPXt7Y29sb3I6ICdyZWQnLCBtYXJnaW5Ub3A6ICc1cHgnLCBmb250U2l6ZTogJzAuODVlbSd9fT5MYSBmcmFzZSBpbmdyZXNhZGEgZXMgaW5jb3JyZWN0YS48L2Rpdj59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJoNlwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEwcHgnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX0+RGF0b3MgcXVlIHNlIHBlcmRlcsOhbjo8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXhXaWR0aDogJzYwMHB4JywgbWFyZ2luOiAnMCBhdXRvJywgZm9udEZhbWlseTogJ3NhbnMtc2VyaWYnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmVuZGVyaXphZG9ySlNPTiBkYXRvcz17Y29uZmlybWFjaW9uQm9ycmFkby5kYXRvc30gLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8obnVsbCk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsYXJcclxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maXJtYWNpb25Cb3JyYWRvKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhc2VCb3JyYWRvLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSBcImZvcnphciBib3JyYWRvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wdXQtZm9yemFyLWJvcnJhZG8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtkZWZCb3RvbiwgZm9yUGtQYWRyZX0gPSBjb25maXJtYWNpb25Cb3JyYWRvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JQayA9IGRlZkJvdG9uLmZvclBrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsaXN0bywgYWdyZWdhciB9ID0gZ2V0QkZWYXJOYW1lcyhjYXNpbGxlcm8uc2FsdG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ubnVtID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZSwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8oZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19PkJvcnJhciBkZSB0b2RhcyBmb3JtYXM8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvRGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgKX1cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDYXNpbGxlcm9EZXNjb25vY2lkbyhwcm9wczogeyBjYXNpbGxlcm86IENhc2lsbGVyb0Jhc2UsIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICByZXR1cm4gPERlc3BsZWdhckNhc2lsbGVyb1xyXG4gICAgICAgIGlkPXtgY2FzaWxsZXJvZGVzY29ub2NpZG8tJHtwcm9wcy5jYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWB9XHJcbiAgICAgICAgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQmxvcXVlfVxyXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxUeXBvZ3JhcGh5PlRpcG8gZGUgY2FzaWxsZXJvIG5vIGltcGxlbWVudGFkbzogXCJ7cHJvcHMuY2FzaWxsZXJvLnRpcG9jfVwiIHBhcmEgXCJ7cHJvcHMuY2FzaWxsZXJvLmNhc2lsbGVyb31cIjwvVHlwb2dyYXBoeT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtwcm9wcy5jYXNpbGxlcm8gYXMgQ2FzaWxsZXJvRW5jYWJlemFibGV9IGxlZXI9e2ZhbHNlfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz5cclxufVxyXG5cclxuZnVuY3Rpb24gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQazogRm9yUGspIHtcclxuICAgIHJldHVybiB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4ge1xyXG4gICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZvcm11bGFyaW86IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcyxcclxuICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6IHN0YXRlLm9wY2lvbmVzLm1vZG9EZXNwbGllZ3VlLFxyXG4gICAgICAgICAgICBvcGNpb25lczogc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gQ29uanVudG9QcmVndW50YXNEZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogQ29uanVudG9QcmVndW50YXMsIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICBsZXQgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBpZCA9IGBjb25qdW50by1wcmVndW50YXMtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogcmVnaXN0cmFkb3JEZVZhcmlhYmxlKGNhc2lsbGVybylcclxuICAgIH0pXHJcbiAgICBsZXQgbW9kb0Rlc3BsaWVndWUgPSBcIm5vcm1hbFwiO1xyXG4gICAgbGV0IGhhYmlsaXRhZG8gPSB0cnVlO1xyXG4gICAgcmV0dXJuIGhhYmlsaXRhZG8gfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyA8RGVzcGxlZ2FyQ2FzaWxsZXJvIGlkPXtpZH0gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e2ZvclBrfSBsZWVyPXtjYXNpbGxlcm8ubGVlciAhPT0gZmFsc2V9IC8+XHJcbiAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPiA6IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyhwcm9wczogeyBibG9xdWVPRm9ybXVsYXJpbzogQmxvcXVlIHwgRm9ybXVsYXJpbyB8IENvbmp1bnRvUHJlZ3VudGFzLCBmb3JtdWxhcmlvOiBGb3JtdWxhcmlvLCBmb3JQazogRm9yUGssIG11bHRpcGxlOiBib29sZWFuIH0pIHtcclxuICAgIHZhciBwYXJjaWFsaXphYmxlID0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2MgPT0gJ0YnO1xyXG4gICAgY29uc3QgW3ZlclRvZG8sIHNldFZlclRvZG9dID0gdXNlU3RhdGUoIXBhcmNpYWxpemFibGUpO1xyXG4gICAgY29uc3QgW2ZvclBrQWN0dWFsLCBzZXRGb3JQa0FjdHVhbF0gPSB1c2VTdGF0ZTxJZENhc2lsbGVybyB8IG51bGw+KG51bGwpO1xyXG4gICAgaWYgKHBhcmNpYWxpemFibGUpIHtcclxuICAgICAgICBpZiAoZm9yUGtBY3R1YWwgIT0gcHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8uY2FzaWxsZXJvKSB7XHJcbiAgICAgICAgICAgIHNldFZlclRvZG8oZmFsc2UpXHJcbiAgICAgICAgICAgIHNldEZvclBrQWN0dWFsKHByb3BzLmJsb3F1ZU9Gb3JtdWxhcmlvLmNhc2lsbGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXRWZXJUb2RvKHRydWUpO1xyXG4gICAgICAgICAgICB9LCAyNTApXHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGltZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IGxpbWl0ZU5vVmVyVG9kbyA9IDM7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby50aXBvYyA9PSAnRicpIHtcclxuICAgICAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhwcm9wcy5mb3JQayk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW3RvUGxhaW5Gb3JQayhwcm9wcy5mb3JQayksIHZlclRvZG9dKVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2MgPT0gJ0YnICYmIHZlclRvZG8pIHtcclxuICAgICAgICAgICAgdmFyIHsgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsIH0gPSBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyByZXNwdWVzdGE6IG51bGwsIHZhcmlhYmxlOiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUywgZm9yUGs6IHByb3BzLmZvclBrIH0pO1xyXG4gICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgfHwgc2lndWllbnRlVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUoY29hbGVzY2UodmFyaWFibGVBY3R1YWwgYXMgc3RyaW5nIHwgbnVsbCwgc2lndWllbnRlVmFyaWFibGUgYXMgc3RyaW5nIHwgbnVsbCkgYXMgSWRWYXJpYWJsZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKClcclxuICAgICAgICAgICAgICAgIGlmIChmZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsocHJvcHMuZm9yUGspXS5yZXN1bWVuID09ICdvaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RvcCgpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvVG9wKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGVuaWRvXCI+XHJcbiAgICAgICAge3ZlclRvZG8gPyBudWxsIDogPGRpdiBzdHlsZT17eyBoZWlnaHQ6IFwiNTAwcHhcIiwgdGV4dEFsaWduOiAnY2VudGVyJywgdmVydGljYWxBbGlnbjogJ21pZGRsZScsIHdpZHRoOiAnMTAwJScsIHBvc2l0aW9uOiBcImZpeGVkXCIsIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLDEwMCwxMDAsMC4zKScsIGZvbnRTaXplOiAnMjAwJScgfX0gPmNhcmdhbmRvLi4uPC9kaXY+fVxyXG4gICAgICAgIHtwcm9wcy5ibG9xdWVPRm9ybXVsYXJpby5jYXNpbGxlcm9zLm1hcCgoY2FzaWxsZXJvLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBjYXNpbGxlcm8udGlwb2MgKyAnLScgKyBjYXNpbGxlcm8uaWRfY2FzaWxsZXJvICsgJy0nICsgaTtcclxuICAgICAgICAgICAgcmV0dXJuICh2ZXJUb2RvIHx8IGkgPCBsaW1pdGVOb1ZlclRvZG8gP1xyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlBcIiA/IDxQcmVndW50YURlc3BsaWVndWUga2V5PXtrZXl9IHByZWd1bnRhPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gZGVzcGxpZWd1ZUVuY2FiZXphZG89e2Nhc2lsbGVyby5kZXNwbGllZ3VlRW5jYWJlemFkbyA/PyAocHJvcHMuYmxvcXVlT0Zvcm11bGFyaW8udGlwb2MgPT0gJ0NQJyA/ICdsYXRlcmFsJyA6ICdzdXBlcmlvcicpfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkJcIiA/IDxCbG9xdWVEZXNwbGllZ3VlIGtleT17a2V5fSBibG9xdWU9e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJGSUxUUk9cIiA/IDxGaWx0cm9EZXNwbGllZ3VlIGtleT17a2V5fSBmaWx0cm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiQkZcIiA/IDxCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9ybXVsYXJpbz17cHJvcHMuZm9ybXVsYXJpb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIkNPTlNcIiA/IDxDb25zaXN0ZW5jaWFEZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8udGlwb2MgPT0gXCJDUFwiID8gPENvbmp1bnRvUHJlZ3VudGFzRGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlRFWFRPXCIgPyA8VGV4dG9EZXNwbGllZ3VlIGtleT17a2V5fSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gZm9yUGs9e3Byb3BzLmZvclBrfSAvPiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVyby50aXBvYyA9PSBcIlBNQVRSSVpcIiA/IDxQTWF0cml6RGVzcGxpZWd1ZSBrZXk9e2tleX0gY2FzaWxsZXJvPXtjYXNpbGxlcm99IGZvclBrPXtwcm9wcy5mb3JQa30gLz4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaWxsZXJvLnRpcG9jID09IFwiTElCUkVcIiA/IDxMaWJyZURlc3BsaWVndWUga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JtdWxhcmlvPXtwcm9wcy5mb3JtdWxhcmlvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FzaWxsZXJvRGVzY29ub2NpZG8ga2V5PXtrZXl9IGNhc2lsbGVybz17Y2FzaWxsZXJvfSBmb3JQaz17cHJvcHMuZm9yUGt9IC8+XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IGkgPT0gbGltaXRlTm9WZXJUb2RvID9cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT0nJHNwaW5uZXInIGNsYXNzTmFtZT1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5jYXJnYW5kbyBibG9xdWUuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgICAgIH08L2Rpdj5cclxufVxyXG5cclxuZnVuY3Rpb24gQmxvcXVlRGVzcGxpZWd1ZShwcm9wczogeyBibG9xdWU6IEJsb3F1ZSwgZm9ybXVsYXJpbzogRm9ybXVsYXJpbywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGJsb3F1ZSwgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgdmFyIGtleSA9IGJsb3F1ZS52ZXJfaWQgIT0gJy0nICYmIGJsb3F1ZS52ZXJfaWQgfHwgYmxvcXVlLmNhc2lsbGVybztcclxuICAgIHZhciBhY3RpdmVTdGVwID0gMDtcclxuICAgIHZhciBtdWx0aXBsZSA9ICEhYmxvcXVlLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBsaXN0YSA9IFt7IGZvclBrLCBrZXk6IDAsIG11bHRpcGxlOiBmYWxzZSB9XTtcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGJsb3F1ZS5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihibG9xdWUuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgbW9kb0Rlc3BsaWVndWUgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgaWYgKG11bHRpcGxlKSB7XHJcbiAgICAgICAgLy8gVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFxyXG4gICAgICAgIC8vIGxpc3RhPXJlc3B1ZXN0YXMucGVyc29uYXMubWFwKChfcGVyc29uYSwgaSk9PihcclxuICAgICAgICAvLyAgICAge2ZvclBrOnsuLi5mb3JQaywgcGVyc29uYTppKzF9LCBrZXk6aSsxLCBtdWx0aXBsZTp0cnVlfVxyXG4gICAgICAgIC8vICkpXHJcbiAgICB9XHJcbiAgICB2YXIgaWQgPSBgYmxvcXVlLSR7YmxvcXVlLmlkX2Nhc2lsbGVyb31gO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgIGlkLFxyXG4gICAgICAgIHN0eWxlOiAnZGlzcGxheScsXHJcbiAgICAgICAgZnVuOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4gaGFiaWxpdGFkb3IocmVzcHVlc3RhcykgfHwgbW9kb0Rlc3BsaWVndWUgPT0gJ21ldGFkYXRvcycgPyAndW5zZXQnIDogJ25vbmUnXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtibG9xdWV9IG51ZXN0cm8tYmxvcXVlPXtibG9xdWUuaWRfY2FzaWxsZXJvfSBlcy1tdWx0aXBsZT17bXVsdGlwbGUgPyAnU0knIDogJ05PJ30gaWQ9e2lkfT5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtibG9xdWV9IGZvclBrPXtmb3JQa30gLz5cclxuICAgICAgICB7bGlzdGEubWFwKCh7IGtleSwgZm9yUGssIG11bHRpcGxlIH0pID0+XHJcbiAgICAgICAgICAgIDxEZXNwbGVnYXJDb250ZW5pZG9JbnRlcm5vQmxvcXVlT0Zvcm11bGFyaW8ga2V5PXtrZXl9IGJsb3F1ZU9Gb3JtdWxhcmlvPXtibG9xdWV9IGZvcm11bGFyaW89e3Byb3BzLmZvcm11bGFyaW99IGZvclBrPXtmb3JQa30gbXVsdGlwbGU9e211bHRpcGxlfSAvPlxyXG4gICAgICAgICl9XHJcbiAgICA8L0Rlc3BsZWdhckNhc2lsbGVybz47XHJcbn1cclxuXHJcbmNvbnN0IEZvcm11bGFyaW9FbmNhYmV6YWRvID0gRGVzcGxpZWd1ZUVuY2FiZXphZG87XHJcblxyXG5mdW5jdGlvbiBNZW51TGV0cmEocHJvcHM6IHsgdGFtYW5uaW86IG51bWJlciwgZGVub21pbmFjaW9uOiBzdHJpbmcgfSkge1xyXG4gICAgY29uc3QgY2FtYmlhckxldHJhID0gKHRhbWFubmlvOiBudW1iZXIpID0+IHtcclxuICAgICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICByb290LnN0eWxlLmZvbnRTaXplID0gdGFtYW5uaW8gKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gPE1lbnVJdGVtXHJcbiAgICAgICAgb25DbGljaz17KCkgPT4gY2FtYmlhckxldHJhKHByb3BzLnRhbWFubmlvKX0gc3R5bGU9e3sgZm9udFNpemU6IHByb3BzLnRhbWFubmlvICsgJ3B4JyB9fVxyXG4gICAgPmxldHJhIHtwcm9wcy5kZW5vbWluYWNpb259PC9NZW51SXRlbT5cclxufVxyXG5cclxuZnVuY3Rpb24gQmFycmFEZU5hdmVnYWNpb24ocHJvcHM6IHsgZm9yUGs6IEZvclBrLCBzb2xvTGVjdHVyYTogYm9vbGVhbiwgbW9kb0RpcmVjdG86IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgZm9yUGsgPSBwcm9wcy5mb3JQaztcclxuICAgIGNvbnN0IHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgY29uc3QgW2NvbmZpcm1hQ2VycmFyLCBzZXRDb25maXJtYUNlcnJhcl0gPSB1c2VTdGF0ZTxib29sZWFuIHwgbnVsbD4oZmFsc2UpO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICB2YXIgZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICB2YXIgY2VycmFyRGlyZWN0byA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZW1vdmVDU1NCeUlkKEJPT1RTVFJBUF81XzFfM19TUkMpO1xyXG4gICAgICAgIGdvdG9Db25zaXN0aXIoXHJcbiAgICAgICAgICAgIGVzdHJ1Y3R1cmEub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW2ZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLnRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvL3ZhciBoYXNoPW5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uaGFzaD8ucmVwbGFjZSgvXlxcIy8sJycpLnNwbGl0KCcmYXV0b3Byb2NlZCcpWzBdKTtcclxuICAgICAgICAvLy8vaGFzaC5kZWxldGUoJ2F1dG9wcm9jZWQnKVxyXG4gICAgICAgIC8vY2xvc2UoKTtcclxuICAgICAgICAvL2xvY2F0aW9uLmhhc2g9aGFzaC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgdmFyIGJvdG9uZXNGb3JtdWxhcmlvID0gW107XHJcbiAgICBpZiAoIW9wY2lvbmVzLm1vZG9EaXJlY3RvKSB7XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJ2hkcicsIGFicjogJ0hkUicsIGlkOiBJRF9CT1RPTl9WT0xWRVJfSERSLCBsYWJlbDogJ0hvamEgZGUgUnV0YScsIHJldHJvY2VzbzogMCB9KVxyXG4gICAgfVxyXG4gICAgb3BjaW9uZXMucGlsYUZvclBrLmZvckVhY2goKGZvclBrLCBpKSA9PlxyXG4gICAgICAgIGJvdG9uZXNGb3JtdWxhcmlvLnB1c2goeyBxdWU6ICd2b2x2ZXInLCBhYnI6IGZvclBrLmZvcm11bGFyaW8ucmVwbGFjZSgvXkY6LywgJycpLCBsYWJlbDogZm9yUGsuZm9ybXVsYXJpbywgcmV0cm9jZXNvOiBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoIC0gaSB9KVxyXG4gICAgKVxyXG4gICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJycsIGFicjogZm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCAnJyksIGxhYmVsOiBmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286IDAgfSk7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6IHByb3BzLm1vZG9EaXJlY3RvID8gSURfQk9UT05fQ0VSUkFSIDogSURfQk9UT05fVk9MVkVSX0hEUiwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIGNvbnN0IGNhbWJpYXIgPSAobW9kb0Rlc3BsaWVndWU6IE1vZG9EZXNwbGllZ3VlKSA9PiB7XHJcbiAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuTU9ET19ERVNQTElFR1VFKHsgbW9kb0Rlc3BsaWVndWUgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDw+XHJcbiAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cImZvcm11bGFyaW9zXCIgY2xhc3NOYW1lPVwiYmFycmEtbmF2ZWdhY2lvblwiIHNvbG8tbGVjdHVyYT17cHJvcHMuc29sb0xlY3R1cmEgPyAnc2knIDogJ25vJ30gPlxyXG4gICAgICAgICAgICB7Ym90b25lc0Zvcm11bGFyaW8ubWFwKChiLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj17Yi5xdWUgPT0gZm9yUGsuZm9ybXVsYXJpbyA/IFwicHJpbWFyeVwiIDogXCJpbmhlcml0XCJ9IHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2IuaWR9XHJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtpfS0ke2IucXVlfS0ke2IucmV0cm9jZXNvfWB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFiLnF1ZX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWUgPT0gJ2hkcicgPyBkaXNwYXRjaGVycy5WT0xWRVJfSERSKHt9KSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oeyBtYWduaXR1ZFJldHJvY2VzbzogYi5yZXRyb2Nlc28gfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYi5xdWUgPT0gJ2hkcicgPyBudWxsIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBvcGNpb25lcy5waWxhRm9yUGtbb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCAtIGIucmV0cm9jZXNvXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFiclwiPntiLmFicn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAge2IucXVlID09ICdoZHInID8gPElDT04uQXNzaWdubWVudCAvPiA6IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWxcIj57Yi5sYWJlbH08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYSA/IDxUeXBvZ3JhcGh5IGNvbXBvbmVudD1cInNwYW5cIiBzdHlsZT17eyBtYXJnaW46ICcwIDEwcHgnIH19PiAoU29sbyBMZWN0dXJhKSA8L1R5cG9ncmFwaHk+IDogbnVsbH1cclxuICAgICAgICB7cHJvcHMubW9kb0RpcmVjdG8gP1xyXG4gICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwIGtleT1cInZvbHZlcl95X2dyYWJhclwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwIDMwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e0lEX0JPVE9OX0NFUlJBUn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLnNvbG9MZWN0dXJhIHx8ICFnZXREaXJ0eSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VycmFyRGlyZWN0bygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYUNlcnJhcih0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPElDT04uRXhpdFRvQXBwIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXshIWNvbmZpcm1hQ2VycmFyfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2hhY2UgcXVlIG5vIHNlIGNpZXJyZSBlbCBtZW5zYWplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldENvbmZpcm1hQ2VycmFyKGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiYWxlcnQtZGlhbG9nLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgaWQ9XCJhbGVydC1kaWFsb2ctdGl0bGVcIj5Db25maXJtZSBjaWVycmUgZGUgZW5jdWVzdGE8L0RpYWxvZ1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dCBpZD1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVzdMOhIHBvciBzYWxpciBkZSBsYSBlbmN1ZXN0YSwgc2UgcGVyZGVyw6FuIGxvcyBjYW1iaW9zIG5vIGd1YXJkYWRvcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJyYXJEaXJlY3RvKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NhcnRhciBjYW1iaW9zIHkgY2VycmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbmZpcm1hQ2VycmFyKGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXIgZWRpdGFuZG8gZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5zb2xvTGVjdHVyYSA/IG51bGwgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17XCJzYXZlLWJ1dHRvblwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dHJ1ZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHRydWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLlNhdmUgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b25Hcm91cD5cclxuICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgIDogbnVsbH1cclxuICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9XCJtb3N0cmFyLWZvclBrXCIgY29tcG9uZW50PVwic3BhblwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMTBweCcgfX0+XHJcbiAgICAgICAgICAgIHtWRVJfRE9NSU5JTyA/IDxkaXYga2V5PXtkb21pbmlvfT48c3Bhbj5kb21pbmlvPC9zcGFuPjxzcGFuPntkb21pbmlvfTwvc3Bhbj48L2Rpdj4gOiAnJ31cclxuICAgICAgICAgICAge2xpa2VBcihwcm9wcy5mb3JQaykuZmlsdGVyKChfLCBrKSA9PiBrICE9ICdmb3JtdWxhcmlvJykubWFwKCh2LCBrKSA9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2t9PjxzcGFuPntrfTwvc3Bhbj48c3Bhbj57dn08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgPEZhc3RTZXR1cD5cclxuICAgICAgICAgICAgPE1lbnVJdGVtIG9uQ2xpY2s9eygpID0+IGNhbWJpYXIoXCJyZWxldmFtaWVudG9cIil9Pm5vcm1hbDwvTWVudUl0ZW0+XHJcbiAgICAgICAgICAgIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjYW1iaWFyKFwiUERGXCIpfT5QREYgcGFyYSByZWxldmFtaWVudG88L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2FtYmlhcihcIm1ldGFkYXRvc1wiKX0+cmV2aXNhciBtZXRhZGF0b3M8L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8RGl2aWRlciAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsxMn0gZGVub21pbmFjaW9uPVwibXV5IGNoaWNhXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTR9IGRlbm9taW5hY2lvbj1cImNoaWNhXCIgLz5cclxuICAgICAgICAgICAgPE1lbnVMZXRyYSB0YW1hbm5pbz17MTZ9IGRlbm9taW5hY2lvbj1cIm5vcm1hbFwiIC8+XHJcbiAgICAgICAgICAgIDxNZW51TGV0cmEgdGFtYW5uaW89ezE5fSBkZW5vbWluYWNpb249XCJncmFuZGVcIiAvPlxyXG4gICAgICAgICAgICA8TWVudUxldHJhIHRhbWFubmlvPXsyMn0gZGVub21pbmFjaW9uPVwiZW5vcm1lXCIgLz5cclxuICAgICAgICAgICAgPERpdmlkZXIgLz5cclxuICAgICAgICAgICAgPE1lbnVJdGVtPjxsYWJlbD48Q2hlY2tib3ggY2hlY2tlZD17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lc30gb25DaGFuZ2U9e1xyXG4gICAgICAgICAgICAgICAgKCkgPT4gZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ2NvbkNhbXBvT3BjaW9uZXMnLCB2YWxvcjogIW9wY2lvbmVzLmNvbkNhbXBvT3BjaW9uZXMgfSkpXHJcbiAgICAgICAgICAgIH0gaW5wdXRQcm9wcz17eyAnYXJpYS1sYWJlbCc6ICdwcmltYXJ5IGNoZWNrYm94JyB9fSAvPmNhbXBvIG9wY2lvbmVzPC9sYWJlbD48L01lbnVJdGVtPlxyXG4gICAgICAgICAgICA8TWVudUl0ZW0+PGxhYmVsPjxDaGVja2JveCBjaGVja2VkPXtvcGNpb25lcy5zYWx0b0F1dG9tYXRpY299IG9uQ2hhbmdlPXtcclxuICAgICAgICAgICAgICAgICgpID0+IGRpc3BhdGNoKGRpc3BhdGNoZXJzLlNFVF9PUENJT04oeyBvcGNpb246ICdzYWx0b0F1dG9tYXRpY28nLCB2YWxvcjogIW9wY2lvbmVzLnNhbHRvQXV0b21hdGljbyB9KSlcclxuICAgICAgICAgICAgfSBpbnB1dFByb3BzPXt7ICdhcmlhLWxhYmVsJzogJ3ByaW1hcnkgY2hlY2tib3gnIH19IC8+c2FsdG8gYXV0b23DoXRpY288L2xhYmVsPjwvTWVudUl0ZW0+XHJcbiAgICAgICAgPC9GYXN0U2V0dXA+XHJcbiAgICA8Lz5cclxufVxyXG5cclxuZnVuY3Rpb24gQm90b25Wb2x2ZXJFbkRpdih7IGlkIH06IHsgaWQ6IHN0cmluZyB9KSB7XHJcbiAgICB2YXIgeyBvcGNpb25lcyB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+ICh7IG9wY2lvbmVzOiBzdGF0ZS5vcGNpb25lcyB9KSk7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgZXNWb2x2ZXIgPSBvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoID4gMDtcclxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImRpdi1ib3Rvbi12b2x2ZXJcIj5cclxuICAgICAgICA8QnV0dG9uIGlkPXtpZH0gY2xhc3NOYW1lPVwiYm90b24tdm9sdmVyXCJcclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVzVm9sdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG9wY2lvbmVzLnBpbGFGb3JQa1tvcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoIC0gMV0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuVk9MVkVSX0RFX0ZPUk1VTEFSSU8oeyBtYWduaXR1ZFJldHJvY2VzbzogMSB9KSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdG9uQ2VycmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURfQk9UT05fQ0VSUkFSKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRF9CT1RPTl9WT0xWRVJfSERSKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib3RvbkNlcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3RvbkNlcnJhci5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA+IDxJQ09OLkNoZXZyb25MZWZ0IC8+e2VzVm9sdmVyID8gXCIgVm9sdmVyXCIgOiBcIiBDZXJyYXJcIn08L0J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5mdW5jdGlvbiBGb3JtdWxhcmlvRGVzcGxpZWd1ZShwcm9wczogeyBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIGZvclBrID0gcHJvcHMuZm9yUGs7XHJcbiAgICB2YXIgeyBmb3JtdWxhcmlvLCBtb2RvRGVzcGxpZWd1ZSwgb3BjaW9uZXMgfVxyXG4gICAgICAgID0gdXNlU2VsZWN0b3JWaXZpZW5kYShwcm9wcy5mb3JQayk7XHJcbiAgICB2YXIgc29sb0xlY3R1cmEgPSBnZXREYXRvc0J5UGFzcygpLnNvbG9MZWN0dXJhO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGVzVm9sdmVyID0gb3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aCA+IDA7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHZhciBjb250cm9sU2Nyb2xsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgYXJyaWJhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJyk7XHJcbiAgICAgICAgICAgIGlmIChhcnJpYmEpIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYXJyaWJhLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFycmliYS5lbFRvcFZpc2liaWxpemFyICE9IG51bGwgJiYgYXJyaWJhLmVsVG9wVmlzaWJpbGl6YXIgKyAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYWJham8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpO1xyXG4gICAgICAgICAgICBpZiAoYWJham8pIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oYWJham8uc3R5bGUsICd2aXNpYmlsaXR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgYWJham8uZWxCb3R0b21WaXNpYmlsaXphciAhPSBudWxsICYmIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgLSAyMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZENhc28gPSBsaWtlQXIocHJvcHMuZm9yUGspLmZpbmQoKF8sIGspID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGsgIT0gJ2Zvcm11bGFyaW8nXHJcbiAgICAgICAgfSk/LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnRpdGxlID0gZ2V0RXN0cnVjdHVyYSgpLm9wZXJhdGl2byArICctICcgKyBpZENhc287XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNvbnRyb2xTY3JvbGwpO1xyXG4gICAgICAgIGNvbnRyb2xTY3JvbGwoKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY29udHJvbFNjcm9sbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIFRPRE8gVm9sdmVyIGEgcG9uZXIgZWwgbW92aW1pZW50byBhIGxhIGFjdHVhbFxyXG4gICAgdmFyIGFjdHVhbDogYW55XHJcbiAgICB2YXIgY29tcGxldG86IGFueVxyXG4gICAgdmFyIG9uQ2xpY2tTYWx0YXJBY3R1YWwgPSAoKSA9PiB7XHJcbiAgICAgICAgdmFyIHsgdmFyaWFibGVBY3R1YWwgfSA9IGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IHJlc3B1ZXN0YTogbnVsbCwgdmFyaWFibGU6IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLCBmb3JQazogcHJvcHMuZm9yUGsgfSk7XHJcbiAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsKSB7XHJcbiAgICAgICAgICAgIGVuZm9jYXJFbGVtZW50b0RlVmFyaWFibGUodmFyaWFibGVBY3R1YWwpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGxpc3RhTW9kb3M6IE1vZG9EZXNwbGllZ3VlW10gPSBbJ21ldGFkYXRvcycsICdyZWxldmFtaWVudG8nLCAnUERGJ107XHJcbiAgICBbJ2JvdG9uLXZvbHZlci0xJywgJ2JvdG9uLXZvbHZlci0yJ10uZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgcmVnaXN0cmFyRWxlbWVudG8oe1xyXG4gICAgICAgICAgICBpZCwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCBlc1ZvbHZlciA/IGZlZWRiYWNrRm9ybS5yZXN1bWVuIDogY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3BlY2lhbCBoYXkgcXVlIGxlZXJsbyBlbiBlbCBwYXJzZXIgZGUgY2FzaWxsZXJvcyBzaSBlc3RvIHRlcm1pbmEgcXVlZGFuZG8gYXPDrVxyXG4gICAgdmFyIHBhbnRhbGxhQ29tcGxldGEgPSBmb3JtdWxhcmlvLmVzcGVjaWFsPy5wYW50YWxsYUNvbXBsZXRhO1xyXG4gICAgY29uc3QgbW9kb0RNOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPEFwcEJhclByaW5jaXBhbFxyXG4gICAgICAgICAgICAgICAgbW9kb0RNPXttb2RvRE19XHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYT17c29sb0xlY3R1cmF9XHJcbiAgICAgICAgICAgICAgICBiYXJyYU5hdkZvcm11bGFyaW89e1xyXG4gICAgICAgICAgICAgICAgICAgIDxCYXJyYURlTmF2ZWdhY2lvbiBmb3JQaz17Zm9yUGt9IHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYSB8fCBmYWxzZX0gbW9kb0RpcmVjdG89e29wY2lvbmVzLm1vZG9EaXJlY3RvfSAvPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibWluaS1jb25zb2xlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvQXBwQmFyUHJpbmNpcGFsPlxyXG4gICAgICAgICAgICA8bWFpbj5cclxuICAgICAgICAgICAgICAgIDxQYXBlciBjbGFzc05hbWU9XCJmb3JtdWxhcmlvXCIgbW9kby1kZXNwbGllZ3VlPXttb2RvRGVzcGxpZWd1ZX0gdmVyLW51bS1vcGNpb25lcz17b3BjaW9uZXMuY29uQ2FtcG9PcGNpb25lcyA/ICdTSScgOiAnTk8nfT5cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0xXCIgLz59XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEZvcm11bGFyaW9FbmNhYmV6YWRvIGNhc2lsbGVybz17Zm9ybXVsYXJpb30gLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPERlc3BsZWdhckNvbnRlbmlkb0ludGVybm9CbG9xdWVPRm9ybXVsYXJpbyBibG9xdWVPRm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9ybXVsYXJpbz17Zm9ybXVsYXJpb30gZm9yUGs9e2ZvclBrfSBtdWx0aXBsZT17ZmFsc2V9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3BhbnRhbGxhQ29tcGxldGEgPyBudWxsIDogPEJvdG9uVm9sdmVyRW5EaXYgaWQ9XCJib3Rvbi12b2x2ZXItMlwiIC8+fVxyXG4gICAgICAgICAgICAgICAgPC9QYXBlcj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYXJyaWJhJyBjb2xvcj1cInByaW1hcnlcIiBhcmlhLWxhYmVsPVwiYWRkXCIgb25DbGljaz17b25DbGlja1NhbHRhckFjdHVhbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uS2V5Ym9hcmRBcnJvd1VwIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1hY3Rpdm8tYWJham8nIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93RG93biAvPlxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8RmFiIGlkPSdmYWItZXJyb3ItYXJyaWJhJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIEVycm9yXHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hYmFqbycgdmFyaWFudD1cImV4dGVuZGVkXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBhcmlhLWxhYmVsPVwiZWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLk5hdmlnYXRpb25Eb3duIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9J2VzcGFjaW8tZmluYWwtZm9ybXVsYXJpbyc+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YSAmJiBvcGNpb25lcy5mb3JQayA/IDxEZXNwbGVnYXJDb25maXJtYXJCb3JyYXJSZXNwdWVzdGEgZm9yUGs9e29wY2lvbmVzLmZvclBrfSB2YXJpYWJsZUJvcnJhcj17b3BjaW9uZXMubW9kb0JvcnJhclJlc3B1ZXN0YX0gLz4gOiBudWxsfVxyXG4gICAgICAgICAgICA8L21haW4+XHJcbiAgICAgICAgPC8+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXRyaWJ1dG8ocHJvcHM6IHsgbm9tYnJlOiBzdHJpbmcsIHZhbG9yOiBhbnkgfSkge1xyXG4gICAgcmV0dXJuIHByb3BzLnZhbG9yICE9IG51bGwgJiYgcHJvcHMudmFsb3IgIT0gJycgPyA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1wYXJcIj5cclxuICAgICAgICB7cHJvcHMubm9tYnJlID8gPHNwYW4gY2xhc3NOYW1lPVwiYXRyaWJ1dG8tbm9tYnJlXCI+e3Byb3BzLm5vbWJyZX08L3NwYW4+IDogbnVsbH1cclxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by12YWxvclwiPntwcm9wcy52YWxvci50b1N0cmluZygpfTwvc3Bhbj5cclxuICAgIDwvc3Bhbj4gOiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBsaXN0YUVzdGFkb3NDYXJnYTogRXN0YWRvQ2FyZ2FbXSA9IFsncmVzdW1lbicsICdyZWxldmFtaWVudG8nLCAncmVjaWJvJ107XHJcbmV4cG9ydCB2YXIgcmVzdW1pZG9yZXMgPSBbXHJcbiAgICB7IG5vbWJyZTogJ1JFQScsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJva1wiIH0sXHJcbiAgICB7IG5vbWJyZTogJ0NpdGEgcGFjdGFkYScsIGY6IChycjogUmVzcHVlc3Rhc1JhaXopID0+IHJyLnJlc3VtZW5Fc3RhZG8gPT0gXCJjaXRhIHBhY3RhZGFcIiB9LFxyXG4gICAgeyBub21icmU6ICdQZW5kaWVudGVzJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcInZhY2lvXCIgfSxcclxuXTtcclxuXHJcbnJlc3VtaWRvcmVzLnB1c2goXHJcbiAgICB7IG5vbWJyZTogJ090cm9zJywgZjogcmVzdW1pZG9yZXMucmVkdWNlKChnLCByKSA9PiAocnIgPT4gIXIuZihycikgJiYgZyhycikpLCAoXzogUmVzcHVlc3Rhc1JhaXopID0+IHRydWUpIH1cclxuKVxyXG5cclxuZXhwb3J0IHR5cGUgRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlID0gKHByb3BzOiB7XHJcbiAgICBudW1WaXZpZW5kYTogSWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOiBJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3Rhc1JhaXosXHJcbn0pID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbDogRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSAobGluZWFSZXN1bWVuVUFQcmluY2lwYWw6IERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsVHlwZSkgPT4gRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwgPSBsaW5lYVJlc3VtZW5VQVByaW5jaXBhbDtcclxuXHJcbnNldERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsKChwcm9wczoge1xyXG4gICAgbnVtVml2aWVuZGE6IElkRW5jLFxyXG4gICAgZm9ybVByaW5jaXBhbDogSWRGb3JtdWxhcmlvLFxyXG4gICAgdGFyZWE6IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNSYWl6LFxyXG59KSA9PiB7XHJcbiAgICBjb25zdCB7IG51bVZpdmllbmRhLCByZXNwdWVzdGFzLCBmb3JtUHJpbmNpcGFsLCB0YXJlYSB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBpZCA9ICd2aXYtJyArIG51bVZpdmllbmRhO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIGNvbnN0IGZvclBrOiBGb3JQayA9IHsgZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCwgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IE51bWJlcihudW1WaXZpZW5kYSkgYXMgSWRFbmMgfSBhcyBGb3JQazsgLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbiAgICB2YXIgdGVtID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltudW1WaXZpZW5kYV0udGVtO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBpbnRlbnRhckJhY2t1cChmb3JQaylcclxuICAgIH0pXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICBmdW46IChcclxuICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgIGVsZW1lbnRvOiBIVE1MRGl2RWxlbWVudCxcclxuICAgICAgICAgICAgZmVlZGJhY2tBbGw6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgIC8vcHJlZ3VudG8gc2kgZXMgbGEgbWlzbWEgdml2aWVuZGEgcG9ycXVlIGxhIGZ1bmNpb24gc2UgZGlzcGFyYSBcclxuICAgICAgICAgICAgLy9jb24gdG9kYXMgbGFzIGNvbWJpbmFjaW9uZXMgZGUgcmVzcHVlc3RhcyBwYXJhIGNhZGEgZm9yUGtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIHZpdmllbmRhIGV4aXN0ZVxyXG4gICAgICAgICAgICBpZiAocltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvLnNldEF0dHJpYnV0ZSgncmVzdW1lbi1lc3RhZG8nLCBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgICByZXR1cm4gPFRhYmxlUm93IGtleT17bnVtVml2aWVuZGF9PlxyXG4gICAgICAgIDxUYWJsZUNlbGw+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+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhckNpdGFQYWN0YWRhWVNlbGVjY2lvbmFkb0FudGVyaW9yVGVtKHByb3BzOiB7IHRlbTogVEVNIH0pIHtcclxuICAgIGNvbnN0IHsgdGVtIH0gPSBwcm9wcztcclxuICAgIHJldHVybiA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGVtLWNpdGFcIj5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cIkNpdGE6XCIgdmFsb3I9e3RlbS5jaXRhfSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJUZW0ocHJvcHM6IHsgdGVtOiBURU0gfSkge1xyXG4gICAgY29uc3QgeyB0ZW0gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tZG9taWNpbGlvXCI+e3RlbS5ub21jYWxsZX0ge3RlbS5ucm9jYXRhc3RyYWx9IDxBdHJpYnV0byBub21icmU9XCJwaXNvXCIgdmFsb3I9e3RlbS5waXNvfSAvPiA8QXRyaWJ1dG8gbm9tYnJlPVwiZHB0b1wiIHZhbG9yPXt0ZW0uZGVwYXJ0YW1lbnRvfSAvPiA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwic2VjdG9yXCIgdmFsb3I9e3RlbS5zZWN0b3J9IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJlZGlmaWNpb1wiIHZhbG9yPXt0ZW0uZWRpZmljaW99IC8+XHJcbiAgICAgICAgICAgIDxBdHJpYnV0byBub21icmU9XCJjYXNhXCIgdmFsb3I9e3RlbS5jYXNhfSAvPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiZW50cmFkYVwiIHZhbG9yPXt0ZW0uZW50cmFkYX0gLz5cclxuICAgICAgICAgICAgPEF0cmlidXRvIG5vbWJyZT1cImhhYml0YWNpb25cIiB2YWxvcj17dGVtLmhhYml0YWNpb259IC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tb2JzZXJ2YWNpb25lc1wiPlxyXG4gICAgICAgICAgICB7dGVtLm9ic2VydmFjaW9uZXN9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGhhbmRsZUxvZ291dCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgIGF3YWl0IGdldEZvcm1SZW5kZXJlcigpLm9uTG9nb3V0KCk7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBBcHBCYXJQcmluY2lwYWxQcm9wcyA9IHtcclxuICAgIHRpdHVsbz86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIGJhcnJhTmF2Rm9ybXVsYXJpbz86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICAgIG1vZG9ETTogTW9kb0RNO1xyXG4gICAgc29sb0xlY3R1cmE/OiBib29sZWFuO1xyXG4gICAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQXBwQmFyUHJpbmNpcGFsKHByb3BzOiBBcHBCYXJQcmluY2lwYWxQcm9wcyk6IEpTWC5FbGVtZW50IHtcclxuICAgIHZhciBjb2xvcjogJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAncHJpbWFyeScgPSBwcm9wcy5zb2xvTGVjdHVyYSA/ICdzZWNvbmRhcnknIDogcHJvcHMubW9kb0RNID09PSAnY2FwYScgPyAnc3VjY2VzcycgOiAncHJpbWFyeSc7XHJcbiAgICB2YXIgeyBmb3JQaywgcGFudGFsbGFBY3R1YWwgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICBjb25zdCBtb3N0cmFyQm90b25lcmFOYXZlZ2FjaW9uID0gcGFudGFsbGFBY3R1YWwgJiYgcGFudGFsbGFBY3R1YWwgIT09ICdzaW5jcm9uaXphY2lvbl9yZXF1ZXJpZGEnICYmICFwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW87XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIDxBcHBCYXIgcG9zaXRpb249XCJmaXhlZFwiIGNvbG9yPXtjb2xvcn1cclxuICAgICAgICAgICAgc3R5bGU9e3Byb3BzLmRpc2FibGVkID8geyBwb2ludGVyRXZlbnRzOiAnbm9uZScsIG9wYWNpdHk6IDAuOSB9IDoge319XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8VG9vbGJhcj5cclxuICAgICAgICAgICAgICAgIHtwcm9wcy5iYXJyYU5hdkZvcm11bGFyaW99XHJcbiAgICAgICAgICAgICAgICB7bW9zdHJhckJvdG9uZXJhTmF2ZWdhY2lvbiA/IChcclxuICAgICAgICAgICAgICAgICAgICA8Qm90b25lcmFOYXZlZ2FjaW9uIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH0vPiAgXHJcbiAgICAgICAgICAgICAgICApIDogbnVsbH0gXHJcbiAgICAgICAgICAgICAgICB7cHJvcHMubW9kb0RNID09PSAnY2FwYScgJiYgIXByb3BzLmJhcnJhTmF2Rm9ybXVsYXJpbyA/IChcclxuICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeT48c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnNXB4JyB9fT4gTU9ETyBDQVBBQ0lUQUNJw5NOPC9zcGFuPjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPFVzdWFyaW9Mb2d1ZWFkb1lDb25maWcgbW9zdHJhclNldHVwPXshZm9yUGt9IG1vc3RyYXJMb2dvdXQ9eyEhcGFudGFsbGFBY3R1YWwgJiYgIXByb3BzLmJhcnJhTmF2Rm9ybXVsYXJpb30gb25Mb2dvdXQ9e2hhbmRsZUxvZ291dH0gLz5cclxuICAgICAgICAgICAgPC9Ub29sYmFyPlxyXG4gICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XHJcbiAgICAgICAgPC9BcHBCYXI+XHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQm90b25lcmFOYXZlZ2FjaW9uKHByb3BzOiB7IGRpc2FibGVkPzogYm9vbGVhbiB9KTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgY29uc3QgeyBwYW50YWxsYUFjdHVhbCB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlLm9wY2lvbmVzKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPEJ1dHRvbkdyb3VwIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwiaW5oZXJpdFwiPlxyXG4gICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5TRVRfT1BDSU9OKHsgb3BjaW9uOiAncGFudGFsbGFBY3R1YWwnLCB2YWxvcjogJ2hkcicgfSkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cGFudGFsbGFBY3R1YWwgPT09ICdoZHInIHx8IHByb3BzLmRpc2FibGVkfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3BhbnRhbGxhQWN0dWFsID09PSAnaGRyJyA/IHsgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjEpJyB9IDogdW5kZWZpbmVkfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8SUNPTi5Bc3NpZ25tZW50IC8+IEhvamEgZGUgUnV0YVxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ3BhbnRhbGxhQWN0dWFsJywgdmFsb3I6ICdzaW5jcm9uaXphY2lvbicgfSkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17cGFudGFsbGFBY3R1YWwgPT09ICdzaW5jcm9uaXphY2lvbicgfHwgcHJvcHMuZGlzYWJsZWR9XHJcbiAgICAgICAgICAgICAgICBzdHlsZT17cGFudGFsbGFBY3R1YWwgPT09ICdzaW5jcm9uaXphY2lvbicgPyB7IGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC4xKScgfSA6IHVuZGVmaW5lZH1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPElDT04uQ2xvdWRTeW5jIC8+IFNpbmNyb25pemFjacOzblxyXG4gICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFVzdWFyaW9Mb2d1ZWFkb1lDb25maWcocHJvcHM6IHsgXHJcbiAgICBtb3N0cmFyU2V0dXA/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+IFNpbmNyb25pemFyPC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbG9yQm90b25BY2Npb249e21vZG9ETSA9PT0gJ2NhcGEnID8gJ3N1Y2Nlc3MnIDogJ3ByaW1hcnknfVxyXG4gICAgICAgICAgICBvbkFjY2lvbj17aGFuZGxlU2luY3Jvbml6YXJ9XHJcbiAgICAgICAgICAgIG1lbnNhamVWYWNpbz17cHJvcHMucmVxdWVyaWRhID8gXCIgXCIgOiBcIk5vIGhheSBpbmZvcm1hY2nDs24gZGUgZm9ybXVsYXJpb3MgbG9jYWxtZW50ZS5cIn1cclxuICAgICAgICAvPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFBhbnRhbGxhQ2FtYmlvTW9kbygpOiBKU1guRWxlbWVudCB7XHJcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgICBjb25zdCBbYXZpc28sIHNldEF2aXNvXSA9IHVzZVN0YXRlPHsgdGlwbzogJ2luZm8nIHwgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJywgbWVuc2FqZTogc3RyaW5nIH0gfCBudWxsPihudWxsKTtcclxuICAgIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcbiAgICBjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgICBjb25zdCBbbW9kb0RNLCBzZXRNb2RvRE1dID0gdXNlU3RhdGU8TW9kb0RNPigncHJvZHVjJyk7XHJcbiAgICBjb25zdCBbZXJyb3JQYXNzd29yZCwgc2V0RXJyb3JQYXNzd29yZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICAgIGNvbnN0IG9ubGluZTogYm9vbGVhbiA9IHVzZU9ubGluZVN0YXR1cygpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG5cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmV0Y2hNb2RvID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtOiBNb2RvRE0gPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRNb2RvRE0oKTtcclxuICAgICAgICAgICAgZ2V0Rm9ybVJlbmRlcmVyKCkuc2V0TW9kb0RNKG0pO1xyXG4gICAgICAgICAgICBzZXRNb2RvRE0obSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmZXRjaE1vZG8oKTtcclxuICAgIH0sIFtdKTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVDb25maXJtYXJDYW1iaW8gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgaWYgKHBhc3N3b3JkICE9PSAnMTIzNCcpIHtcclxuICAgICAgICAgICAgc2V0RXJyb3JQYXNzd29yZCgnQ29udHJhc2XDsWEgaW5jb3JyZWN0YS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRFcnJvclBhc3N3b3JkKG51bGwpO1xyXG4gICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xyXG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XHJcbiAgICAgICAgc2V0QXZpc28obnVsbCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgbnVldm9Nb2RvOiBNb2RvRE0gPSBtb2RvRE0gPT09ICdwcm9kdWMnID8gJ2NhcGEnIDogJ3Byb2R1Yyc7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1SZW5kZXJlciA9IGdldEZvcm1SZW5kZXJlcigpO1xyXG4gICAgICAgICAgICBhd2FpdCBmb3JtUmVuZGVyZXIub25TaW5jcm9uaXphcihhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCksIHRydWUpO1xyXG4gICAgICAgICAgICBmb3JtUmVuZGVyZXIuc2V0TW9kb0RNKG51ZXZvTW9kbyk7XHJcbiAgICAgICAgICAgIHNldE1vZG9ETShudWV2b01vZG8pO1xyXG4gICAgICAgICAgICBhd2FpdCBmb3JtUmVuZGVyZXIuY2FyZ2FyTW90b3IoKTtcclxuICAgICAgICAgICAgc2V0QXZpc28oeyB0aXBvOiAnc3VjY2VzcycsIG1lbnNhamU6IGBNT0RPICR7bnVldm9Nb2RvLnRvVXBwZXJDYXNlKCl9IEFDVElWQURPIFkgRElTUE9TSVRJVk8gU0lOQ1JPTklaQURPYCB9KTtcclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ3BhbnRhbGxhQWN0dWFsJywgdmFsb3I6ICdtb2RvJyB9KSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHNldEF2aXNvKHsgdGlwbzogJ2Vycm9yJywgbWVuc2FqZTogYEVycm9yIGFsIGNhbWJpYXIgZGUgbW9kbzogJHt1bmV4cGVjdGVkKGVycikubWVzc2FnZX1gIH0pO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICBzZXRQYXNzd29yZCgnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJBZGljaW9uYWxUZXh0ID0gKFxyXG4gICAgICAgIDxUeXBvZ3JhcGh5IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzIwcHgnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX0+XHJcbiAgICAgICAgICAgIE1vZG8gYWN0dWFsOiA8c3BhbiBzdHlsZT17eyBjb2xvcjogbW9kb0RNID09PSAnY2FwYScgPyAnZ3JlZW4nIDogJ2JsdWUnLCB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJyB9fT57bW9kb0RNfTwvc3Bhbj5cclxuICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPExheW91dEFjY2lvbkRpc3Bvc2l0aXZvXHJcbiAgICAgICAgICAgIHRpdHVsb0FwcEJhcj1cIkNBTUJJTyBERSBNT0RPXCJcclxuICAgICAgICAgICAgbW9kb0RNPXttb2RvRE19XHJcbiAgICAgICAgICAgIHRpdHVsb1BhbmVsPVwiQ2FtYmlhciBNb2RvIGRlbCBEaXNwb3NpdGl2b1wiXHJcbiAgICAgICAgICAgIGhlYWRlckFkaWNpb25hbD17aGVhZGVyQWRpY2lvbmFsVGV4dH1cclxuICAgICAgICAgICAgYXZpc289e2F2aXNvfVxyXG4gICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgICBvbmxpbmU9e29ubGluZX1cclxuICAgICAgICAgICAgdGV4dG9Cb3RvbkFjY2lvbj17YENhbWJpYXIgYSBtb2RvICR7bW9kb0RNID09PSAncHJvZHVjJyA/ICdjYXBhJyA6ICdwcm9kdWMnfWB9XHJcbiAgICAgICAgICAgIGNvbG9yQm90b25BY2Npb249e21vZG9ETSA9PT0gJ3Byb2R1YycgPyAncHJpbWFyeScgOiAnc3VjY2Vzcyd9XHJcbiAgICAgICAgICAgIG9uQWNjaW9uPXsoKSA9PiB7IHNldEVycm9yUGFzc3dvcmQobnVsbCk7IHNldERpYWxvZ09wZW4odHJ1ZSk7IH19XHJcbiAgICAgICAgICAgIGNoaWxkcmVuTW9kYWxlcz17XHJcbiAgICAgICAgICAgICAgICA8RGlhbG9nIG9wZW49e2RpYWxvZ09wZW59IG9uQ2xvc2U9eygpID0+IHsgc2V0RGlhbG9nT3BlbihmYWxzZSk7IHNldFBhc3N3b3JkKCcnKTsgc2V0RXJyb3JQYXNzd29yZChudWxsKTsgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ1RpdGxlPkNvbmZpcm1hciBjYW1iaW8gZGUgbW9kbzwvRGlhbG9nVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPERpYWxvZ0NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxNXB4JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpcm1hIGNhbWJpbyBkZSBtb2RvIFwie21vZG9ETX1cIiBhIFwie21vZG9ETSA9PT0gJ3Byb2R1YycgPyAnY2FwYScgOiAncHJvZHVjJ31cIi4gU2Ugc2luY3Jvbml6YXLDoSBlbCBkaXNwb3NpdGl2by5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yUGFzc3dvcmQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgc3R5bGU9e3sgY29sb3I6ICcjZDMyZjJmJywgbWFyZ2luQm90dG9tOiAnMTVweCcsIGZvbnRXZWlnaHQ6ICdib2xkJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JQYXNzd29yZH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMTBweCcgfX0+UG9yIGZhdm9yIGluZ3Jlc2UgbGEgY29udHJhc2XDsWE6PC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cGFzc3dvcmR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFzc3dvcmQoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvclBhc3N3b3JkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yUGFzc3dvcmQobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTAwJScsIHBhZGRpbmc6ICcxMHB4JywgZm9udFNpemU6ICcxNnB4JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvRGlhbG9nQ29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQWN0aW9ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7IHNldERpYWxvZ09wZW4oZmFsc2UpOyBzZXRQYXNzd29yZCgnJyk7IHNldEVycm9yUGFzc3dvcmQobnVsbCk7IH19IGNvbG9yPVwiaW5oZXJpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17aGFuZGxlQ29uZmlybWFyQ2FtYmlvfSBjb2xvcj1cInByaW1hcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maXJtYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dBY3Rpb25zPlxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2c+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAvPlxyXG4gICAgKTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEluZm9WZXJzaW9uU2luY3JvRGVzcGxpZWd1ZVByb3BzIHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEluZm9WZXJzaW9uU2luY3JvRGVzcGxpZWd1ZShfcHJvcHM6IEluZm9WZXJzaW9uU2luY3JvRGVzcGxpZWd1ZVByb3BzKTogSlNYLkVsZW1lbnQge1xyXG4gICAgY29uc3QgdmVyc2lvbiA9IGdldEZvcm1SZW5kZXJlcigpLmdldEFwcENhY2hlVmVyc2lvbigpO1xyXG4gICAgY29uc3QgeyBudW1fc2luY3JvIH0gPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8UGFwZXIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMTBweCcsIHBhZGRpbmc6ICcxMHB4JyB9fT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJub21icmUtdmVyc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5JbnN0aXR1dG8gZGUgRXN0YWTDrXN0aWNhIHkgQ2Vuc29zIGRlIGxhIENpdWRhZCBBdXTDs25vbWEgZGUgQnVlbm9zIEFpcmVzIC0gSURFQ0JBPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PnZlcnNpw7NuIHt2ZXJzaW9ufSAtIHtudW1fc2luY3JvID8gYHNpbmNybzogJHtudW1fc2luY3JvLnRvU3RyaW5nKCl9YCA6ICdzaW4gc2luY3Jvbml6YXInfTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L1BhcGVyPlxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSG9qYURlUnV0YURlc3BsaWVndWVQcm9wcyA9IHtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEhvamFEZVJ1dGFEZXNwbGllZ3VlVHlwZSA9IChwcm9wczogSG9qYURlUnV0YURlc3BsaWVndWVQcm9wcykgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIEhvamFEZVJ1dGFEZXNwbGllZ3VlOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRIb2phRGVSdXRhRGVzcGxpZWd1ZSA9IChob2phRGVSdXRhOiBIb2phRGVSdXRhRGVzcGxpZWd1ZVR5cGUpID0+IEhvamFEZVJ1dGFEZXNwbGllZ3VlID0gaG9qYURlUnV0YVxyXG5cclxuc2V0SG9qYURlUnV0YURlc3BsaWVndWUoKF9wcm9wczogSG9qYURlUnV0YURlc3BsaWVndWVQcm9wcykgPT4ge1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBzY3JvbGxUb1RvcCgpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgdmFyIHsgY2FyZ2FzLCBudW1fc2luY3JvLCBpbmZvcm1hY2lvbkhkciwgcmVzcHVlc3RhcyB9ID0gZ2V0RGF0b3NCeVBhc3MoKTtcclxuICAgIHZhciBmZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKCk7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyUHJpbmNpcGFsXHJcbiAgICAgICAgICAgICAgICBtb2RvRE09e21vZG9ETX1cclxuICAgICAgICAgICAgICAgIHRpdHVsbz1cIkhPSkEgREUgUlVUQVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaG9qYS1kZS1ydXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8SW5mb1ZlcnNpb25TaW5jcm9EZXNwbGllZ3VlLz5cclxuICAgICAgICAgICAgICAgIHtsaWtlQXIoY2FyZ2FzKS5tYXAoKGNhcmdhLCBpZENhcmdhLCBfLCBwb3NpY2lvbikgPT5cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2FyZ2Ega2V5PXtpZENhcmdhfSBjYXJnYT17Y2FyZ2F9IGlkQ2FyZ2E9e2lkQ2FyZ2F9IHBvc2ljaW9uPXtwb3NpY2lvbn0gaW5mb3JtYWNpb25IZHI9e2luZm9ybWFjaW9uSGRyfSBmZWVkYmFja1Jvd1ZhbGlkYXRvcj17ZmVlZGJhY2tSb3dWYWxpZGF0b3J9IHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXN9IC8+XHJcbiAgICAgICAgICAgICAgICApLmFycmF5KCl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvPlxyXG4gICAgKTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTGlzdGFUZXh0b3MocHJvcHM6IHsgdGV4dG9zOiBzdHJpbmdbXSB9KSB7XHJcbiAgICByZXR1cm4gPHVsPlxyXG4gICAgICAgIHtwcm9wcy50ZXh0b3MubWFwKHQgPT4gPGxpPjxUeXBvZ3JhcGh5Pnt0fTwvVHlwb2dyYXBoeT48L2xpPil9XHJcbiAgICA8L3VsPjtcclxufVxyXG5cclxuLy9DT05UUk9MIERFIFBFU1RBw5FBU1xyXG52YXIgYWxsT3BlbmVkVGFiczogeyBbeDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcclxudmFyIGluZm9PcGVuZWRUYWJzID0ge1xyXG4gICAgYWxsT3BlbmVkVGFicyxcclxuICAgIG15SWQ6ICdjYWxjdWxhbmRvLi4uJyxcclxuICAgIG90aGVyVGFic05hbWVzOiAnJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gT3BlbmVkVGFicygpIHtcclxuICAgIGNvbnN0IFt0YWJzLCBzZXRUYWJzXSA9IHVzZVN0YXRlKGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzKTtcclxuICAgIHZhciB7IG1vZG9EaXJlY3RvIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IENhc29TdGF0ZSkgPT4gKHsgbW9kb0RpcmVjdG86IHN0YXRlLm9wY2lvbmVzLm1vZG9EaXJlY3RvIH0pKTtcclxuICAgIGNvbnN0IHVwZGF0ZVRhYnNTdGF0dXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgc2V0VGFicyhpbmZvT3BlbmVkVGFicy5vdGhlclRhYnNOYW1lcyk7XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdteS10YWJzJywgdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdteS10YWJzJywgdXBkYXRlVGFic1N0YXR1cyk7XHJcbiAgICB9LCBbXSlcclxuICAgIHJldHVybiBtb2RvRGlyZWN0byA/IG51bGwgOiAodGFicykgP1xyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGFiLWNvdW50ZXIgdGFiLWVycm9yXCI+wqFBVEVOQ0nDk04hIEhheSBtw6FzIGRlIHVuYSB2ZW50YW5hIGFiaWVydGEuIFNlIHB1ZWRlbiBwZXJkZXIgZGF0b3M6IHt0YWJzfTwvZGl2PlxyXG4gICAgICAgIDpcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYi1jb3VudGVyXCI+4pyUPC9kaXY+XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBcHBEbUVuY3UoKSB7XHJcbiAgICB2YXIgeyBmb3JQaywgcGFudGFsbGFBY3R1YWwgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogQ2Fzb1N0YXRlKSA9PiBzdGF0ZS5vcGNpb25lcyk7XHJcbiAgICB2YXIgZGF0b3NCeVBhc3MgPSBnZXREYXRvc0J5UGFzcygpO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG5cclxuICAgIC8vIERldGVybWluYXIgc2kgbGEgc2luY3Jvbml6YWNpw7NuIGVzIHJlcXVlcmlkYVxyXG4gICAgY29uc3Qgc2luY3JvUmVxdWVyaWRhID0gIWhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MoKVxyXG4gICAgICAgIHx8IChoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKCkgJiYgZGF0b3NCeVBhc3MuaWRwZXIgIT09IGdldEZvcm1SZW5kZXJlcigpLmdldElkcGVyTG9ndWVhZG8oKSk7XHJcblxyXG4gICAgLy8gU2kgbGEgc2luY3JvIGVzIHJlcXVlcmlkYSwgZm9yemFyIHBhbnRhbGxhQWN0dWFsIHbDrWEgUmVkdXhcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHNpbmNyb1JlcXVlcmlkYSAmJiBwYW50YWxsYUFjdHVhbCAhPT0gJ3NpbmNyb25pemFjaW9uX3JlcXVlcmlkYScpIHtcclxuICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuU0VUX09QQ0lPTih7IG9wY2lvbjogJ3BhbnRhbGxhQWN0dWFsJywgdmFsb3I6ICdzaW5jcm9uaXphY2lvbl9yZXF1ZXJpZGEnIH0pKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbc2luY3JvUmVxdWVyaWRhLCBwYW50YWxsYUFjdHVhbCwgZGlzcGF0Y2hdKTtcclxuXHJcbiAgICBpZiAoc2luY3JvUmVxdWVyaWRhKSB7XHJcbiAgICAgICAgY29uc3QgbWVuc2FqZSA9ICFoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zKClcclxuICAgICAgICAgICAgPyA8PiBEZWJlIHNpbmNyb25pemFyIGVsIGRpc3Bvc2l0aXZvIHBhcmEgb2J0ZW5lciB1bmEgaG9qYSBkZSBydXRhLjwvPlxyXG4gICAgICAgICAgICA6IDw+IEVsIHVzdWFyaW8gYXV0ZW50aWNhZG8gbm8gY29pbmNpZGUgY29uIGVsIHVzdWFyaW8gYXNvY2lhZG8gYWxcclxuICAgICAgICAgICAgICAgIHRyYWJham8gYWxtYWNlbmFkbyBlbiBsYSB0YWJsZXQuXHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIERlYmUgc2luY3Jvbml6YXIgYW50ZXMgZGUgY29udGludWFyLlxyXG4gICAgICAgICAgICA8Lz47XHJcbiAgICAgICAgcmV0dXJuIDxQYW50YWxsYVNpbmNyb25pemFjaW9uIHJlcXVlcmlkYT17dHJ1ZX0gbWVuc2FqZVJlcXVlcmlkbz17bWVuc2FqZX0gLz47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZvclBrID09IG51bGwpIHtcclxuICAgICAgICBpZiAocGFudGFsbGFBY3R1YWwgPT09ICdzaW5jcm9uaXphY2lvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxQYW50YWxsYVNpbmNyb25pemFjaW9uIC8+XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYW50YWxsYUFjdHVhbCA9PT0gJ21vZG8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8UGFudGFsbGFDYW1iaW9Nb2RvIC8+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8SG9qYURlUnV0YURlc3BsaWVndWUgLz5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDxGb3JtdWxhcmlvRGVzcGxpZWd1ZSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKFxyXG4gICAgZm9ybVJlbmRlcmVyOiBGb3JtUmVuZGVyZXIsXHJcbiAgICBvcHRzOiB7IGZvclBrUmFpej86IEZvclBrUmFpeiB9ID0ge31cclxuKSB7XHJcbiAgICBhd2FpdCBmb3JtUmVuZGVyZXIuY2FyZ2FyTW90b3IoKTtcclxuICAgIGNvbnN0IHN0b3JlID0gYXdhaXQgY3JlYXJTdG9yZUZvcm11bGFyaW8ob3B0cylcclxuICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgbG9hZENTUyhCT09UU1RSQVBfNV8xXzNfU1JDKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHRocm93IChlcnIpXHJcbiAgICB9XHJcbiAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgPFJlbmRlclByaW5jaXBhbCBzdG9yZT17c3RvcmV9IGRpc3BhdGNoZXJzPXtkaXNwYXRjaGVyc30gbWVuc2FqZVJldG9ybm89e29wdHMuZm9yUGtSYWl6ID8gXCJWb2x2ZXIgYWwgZm9ybXVsYXJpb1wiIDogXCJWb2x2ZXIgYSBsYSBob2phIGRlIHJ1dGFcIn0+XHJcbiAgICAgICAgICAgIDxPcGVuZWRUYWJzIC8+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UgLz5cclxuICAgICAgICA8L1JlbmRlclByaW5jaXBhbD4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZEluc3RhbmNlKCkge1xyXG4gICAgaWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBiYyA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdjb250YWRvcicpO1xyXG4gICAgdmFyIG15SWQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCgxMDAgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKSkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXSA9IDE7XHJcbiAgICBpbmZvT3BlbmVkVGFicy5teUlkID0gbXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICdzb3knKSB7XHJcbiAgICAgICAgICAgIGlmICghYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSkge1xyXG4gICAgICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ3VubG9hZCcpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAnbG9hZCcpIHtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDE7XHJcbiAgICAgICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAnc295JywgaWQ6IG15SWQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzID0gbGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXywgaWQpID0+IGlkICE9IG15SWQpLmpvaW4oJywnKTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9O1xyXG4gICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICdsb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAndW5sb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOiBMaWJyZURlc3BsaWVndWVUeXBlKSA9PiBMaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczoge1xyXG4gICAga2V5OiBzdHJpbmdcclxuICAgIGNhc2lsbGVybzogTGlicmVcclxuICAgIGZvcm11bGFyaW86IEZvcm11bGFyaW9cclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSA9PiA8ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHtcclxuICAgIHR5cGUgQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpc1xyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IElkVmFyaWFibGVcclxuICAgIH1cclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGF1dG9DYXJnYXJQZXJzb25hcyA9IChjb25maWdQYWRyZTogQ29uZmlnUGFkcmUsIHVhUGFkcmVQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSkgPT4ge1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTogUmVzcHVlc3RhcywgY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gfHwgZW1wdHkocmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHx8IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdWzBdW2NvbmZpZ1BhZHJlLnZhclNleG9QZXJzb25hXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvc05vbWJyZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6IHN0cmluZykgPT4gbm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldW2NvbmZpZ1BhZHJlLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1YVBhZHJlUGVyc29uYXNdKSB7XHJcbiAgICAgICAgICAgIGlmICh1YVBhZHJlUGVyc29uYXMgPT0gJ3ZpdmllbmRhcycpIHtcclxuICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNSYWl6LCBjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10gPz8gW10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsIGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHVhc0l0ZXJhcjogUGFydGlhbDx7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogQ29uZmlnUGFkcmVcclxuICAgIH0+O1xyXG4gICAgdmFyIGNvbmZpZ0VuY3U6IENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hcycsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmUnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJsb3Nfbm9tYnJlc1wiIGFzIElkVmFyaWFibGVcclxuICAgIH07XHJcbiAgICB2YXIgY29uZmlnU3VwZTogQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmVfc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibm9tYnJlc19jb21wb25lbnRlc19zdXBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgdWFzSXRlcmFyID0ge1xyXG4gICAgICAgICAgICBob2dhcmVzOiBjb25maWdFbmN1LFxyXG4gICAgICAgICAgICBbXCJob2dhcmVzX3N1cFwiIGFzIElkVW5pZGFkQW5hbGlzaXNdOiBjb25maWdTdXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpa2VBcih1YXNJdGVyYXIpLmZvckVhY2goKGNvbmZpZ1BhZHJlLCB1YVBhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdQYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCB1YVBhZHJlIGFzIElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsIGNvbmZpZ1N1cGVdO1xyXG4gICAgICAgIGNvbmZpZ1BhZHJlcy5mb3JFYWNoKChjb25maWdQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsICd2aXZpZW5kYXMnLCBlc3RydWN0dXJhKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXNwdWVzdGFzUmFpei52ZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICAvL1RPRE86IE1FSk9SQVIgRU4gQUxHVU4gTU9NRU5UTyBFTCBCT1RPTiBMSVNUT1xyXG4gICAgLy9sZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgLy9yZXNwdWVzdGFzUmFpelsnJEIuRjpTMScgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXMnXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSCA/ICdvaycgOiBudWxsO1xyXG4gICAgLy9sZXQgdG90YWxIc3VwID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2hfc3VwJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIC8vcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzFfU1VQJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIc3VwID8gJ29rJyA6IG51bGw7XHJcbn0pXHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGxvYWRJbnN0YW5jZSgpXHJcbn0pXHJcbi8vRklOIENPTlRST0wgUEVTVEHDkUFTXHJcblxyXG5mdW5jdGlvbiBsb2FkQ1NTKGNzc1VSTDogc3RyaW5nLCBpZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcclxuICAgICAgICBsaW5rLmhyZWYgPSBjc3NVUkw7XHJcbiAgICAgICAgbGluay5pZCA9IGlkIHx8IGNzc1VSTDtcclxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIGxpbmsub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGB0cmFlICR7Y3NzVVJMfWApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGluay5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgY2FyZ2FuZG8gZWwgZXN0aWxvJywgZXJyKVxyXG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBwcm9ibGVtYSBjYXJnYW5kbyBlc3RpbG8gJHtjc3NVUkx9YCkpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNTU0J5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgdmFyIGxpbmtOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgbGlua05vZGU/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGxpbmtOb2RlKTtcclxufVxyXG5cclxuY29uc3QgQk9PVFNUUkFQXzVfMV8zX1NSQyA9ICdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnOyJdfQ==
|
|
2244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvcmVuZGVyLWZvcm11bGFyaW8udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBK1JBLHNDQU9DO0lBOEpELDhCQTZCQztJQW1zREQsNEJBS0M7SUFpTUQsb0RBU0M7SUFFRCxvR0FPQztJQUVELG9DQWVDO0lBZUQsMENBcUJDO0lBRUQsZ0RBMEJDO0lBRUQsd0RBOEdDO0lBdUJELDBEQW9GQztJQVFELHdEQXlEQztJQUVELGdEQW9HQztJQUtELGtFQVdDO0lBa0NELGtDQUlDO0lBVUQsZ0NBY0M7SUFFRCw4QkFxQ0M7SUFFRCw4REFrQkM7SUF4OUZELCtCQUErQjtJQUMvQixzQ0FBc0M7SUFDdEMscURBVzBCO0lBQzFCLG1DQWtCaUI7SUFDakIsMkRBb0I0QjtJQUM1Qix5REFLNEI7SUFDNUIsaUNBQXFEO0lBQ3JELDZDQUFxRTtJQUNyRSxxQ0FBMkM7SUFDM0MsK0NBQXlEO0lBQ3pELDJDQUF3QztJQUV4Qyw0Q0FTdUI7SUFHdkIsMkRBYzRCO0lBRTVCLDJDQUEyQztJQUMzQyxtREFBc0Y7SUFFdEYsaUVBQWlFO0lBQ2pFLHdFQUF3RTtJQUN4RSxJQUFBLG9DQUFvQixFQUFDLFNBQWUsK0JBQStCOztZQUMvRCxJQUFJLFlBQVksR0FBRyxJQUFBLCtCQUFlLEdBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxNQUFNLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2RCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxJQUFHLFVBQVUsSUFBSSxLQUFLLEVBQUMsQ0FBQztnQkFDcEIsSUFBQSxpQ0FBYSxFQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQixJQUFBLGtDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FB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QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLFVBQVUsMENBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcclxuaW1wb3J0IHtcclxuICAgIFJlbmRlclByaW5jaXBhbCxcclxuICAgIGFkYXB0YXJUaXBvVmFyQ2FzaWxsZXJvLFxyXG4gICAgSUNPTixcclxuICAgIHNjcm9sbFRvVG9wLFxyXG4gICAgbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aCxcclxuICAgIHVzZU9ubGluZVN0YXR1cyxcclxuICAgIFJlbmRlcml6YWRvckpTT04sXHJcbiAgICBmZWNoYVJlZmVyZW5jaWEsXHJcbiAgICBtZXNSZWZlcmVuY2lhLFxyXG4gICAgb2J0ZW5lclRleHRvUGFyZW50ZXNjbyxcclxufSBmcm9tIFwiLi9yZW5kZXItZ2VuZXJhbFwiO1xyXG5pbXBvcnQge1xyXG4gICAgQmxvcXVlLCBCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYXNpbGxlcm9CYXNlLCBDYXNvU3RhdGUsIENvbmp1bnRvUHJlZ3VudGFzLCBDb25zaXN0ZW5jaWEsXHJcbiAgICBFc3RhZG9DYXJnYSwgRmlsdHJvLCBGb3JQaywgRm9yUGtSYWl6LCBGb3JtdWxhcmlvLFxyXG4gICAgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLCBJbmZvRm9ybXVsYXJpbyxcclxuICAgIE1vZG9EZXNwbGllZ3VlLFxyXG4gICAgT3BjaW9uLCBPcGNpb25NdWx0aXBsZSwgUGxhaW5Gb3JQayxcclxuICAgIFByZWd1bnRhLCBQcmVndW50YUNvbk9wY2lvbmVzLCBQcmVndW50YVNpbXBsZSxcclxuICAgIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YUxhc1VBLCBSZXNwdWVzdGFzUmFpeiwgVmFsb3IsIFRFTSwgSWRDYXJnYSwgQ2FyZ2EsIElkRmluLCBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgSWRDYXNpbGxlcm8sXHJcbiAgICBQcmVndW50YUNvblNpTm8sXHJcbiAgICBUZXh0bywgRXN0cnVjdHVyYSwgSW5mb3JtYWNpb25IZHIsIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLCBSZXN1bWVuRXN0YWRvLCBJZE9wZXJhdGl2bywgSWRFbmMsIExpYnJlLFxyXG4gICAgaXRlcmF0b3IsIGVtcHR5LCBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgUE1hdHJpeixcclxuICAgIE1vZG9ETSxcclxuICAgIElkQ29tb2RpbixcclxuICAgIElkU2VtYW5hLFxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydCB7XHJcbiAgICBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyxcclxuICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyxcclxuICAgIGNhbGN1bGFyQWN0dWFsQkYsXHJcbiAgICBjYWxjdWxhckRpc2FibGVkQkYsXHJcbiAgICBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRixcclxuICAgIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhLFxyXG4gICAgY3JlYXJFbmN1ZXN0YSxcclxuICAgIGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MsXHJcbiAgICBnZXREYXRvc0J5UGFzcyxcclxuICAgIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXosXHJcbiAgICBnZXRNYWluRm9ybUZvclZpdmllbmRhLFxyXG4gICAgaW50ZW50YXJCYWNrdXAsXHJcbiAgICByZXNwdWVzdGFzRm9yUGssXHJcbiAgICBzZXRDYWxjdWxhclZhcmlhYmxlcyxcclxuICAgIHNldERhdG9zQnlQYXNzLFxyXG4gICAgc2V0RXN0cnVjdHVyYSxcclxuICAgIHNldENhbGN1bGFyQ29tb2RpbmVzLFxyXG4gICAgc3VzY3JpYmlyQ2FtYmlvVmFyaWFibGUsXHJcbiAgICBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlXHJcbn0gZnJvbSBcIi4vYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQge1xyXG4gICAgY29tb2RpbmVzSW5pY2lhbGVzLFxyXG4gICAgY3JlYXJTdG9yZUZvcm11bGFyaW8sIGRpc3BhdGNoZXJzLFxyXG4gICAgZ2V0U3RvcmVGb3JtdWxhcmlvLFxyXG4gICAgZ290b0NvbnNpc3RpcixcclxufSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoLCBzaGFsbG93RXF1YWwgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcclxuaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciB9IGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7IHNsZWVwLCBjb2FsZXNjZSwgZGF0ZXRpbWUgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFwcEJhciwgQnV0dG9uR3JvdXAsIENoZWNrYm94LFxyXG4gICAgRGlhbG9nLCBEaWFsb2dBY3Rpb25zLCBEaWFsb2dDb250ZW50LCBEaWFsb2dDb250ZW50VGV4dCxcclxuICAgIERpYWxvZ1RpdGxlLCBEaXZpZGVyLCBGYWIsXHJcbiAgICBJY29uLFxyXG4gICAgTGlzdEl0ZW1JY29uLFxyXG4gICAgTGlzdEl0ZW1UZXh0LFxyXG4gICAgTWVudSwgTWVudUl0ZW0sIFBhcGVyLCBQb3BvdmVyLFxyXG4gICAgVGFibGUsIFRhYmxlQm9keSwgVGFibGVDZWxsLCBUYWJsZUhlYWQsIFRhYmxlUm93LCBUb29sYmFyXHJcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgRXN0YWRvVmFyaWFibGUsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG8sIHNldEF0dHJEaXN0aW50bywgc2V0VmFsb3JEaXN0aW50bywgZGlzcGF0Y2hCeVBhc3MsXHJcbiAgICBnZXREaXJ0eSwgZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICBnZXRGdW5jaW9uSGFiaWxpdGFyLFxyXG4gICAgZ2V0RXN0cnVjdHVyYSxcclxuICAgIGRlZk9wZXJhdGl2byxcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MsXHJcbiAgICBudW1iZXJPclN0cmluZ0luY0lmQXJyYXksXHJcbiAgICBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8sXHJcbiAgICBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSxcclxuICAgIGFjY2lvbl9pZF9wcmVndW50YSxcclxuICAgIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8sXHJcbiAgICBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPLFxyXG4gICAgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVNcclxufSBmcm9tIFwiLi9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcblxyXG5pbXBvcnQgeyBodG1sLCBIdG1sVGFnIH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0IHsgRm9ybVJlbmRlcmVyLCBnZXRGb3JtUmVuZGVyZXIsIHJlZ2lzdHJhckNhcmdhck1vdG9yIH0gZnJvbSBcIi4vcmVuZGVyLWNvbmZpZ1wiO1xyXG5cclxuLy8gUmVnaXN0cmEgbGEgaW1wbGVtZW50YWNpw7NuIGRlIGNhcmdhck1vdG9yIGFsIGNhcmdhciBlbCBtw7NkdWxvLlxyXG4vLyBFc3RvIGV2aXRhIGxhIGRlcGVuZGVuY2lhIGNpcmN1bGFyIHJlbmRlci1jb25maWcg4oaQIGJ5cGFzcy1mb3JtdWxhcmlvLlxyXG5yZWdpc3RyYXJDYXJnYXJNb3Rvcihhc3luYyBmdW5jdGlvbiBjYXJnYXJFc3RydWN0dXJhWURhdG9zRW5NZW1vcmlhKCkge1xyXG4gICAgdmFyIGZvcm1SZW5kZXJlciA9IGdldEZvcm1SZW5kZXJlcigpO1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGF3YWl0IGZvcm1SZW5kZXJlci5sZWVyRXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZGF0b3MgPSBhd2FpdCBmb3JtUmVuZGVyZXIubGVlckRhdG9zKCk7XHJcbiAgICBpZihlc3RydWN0dXJhICYmIGRhdG9zKXtcclxuICAgICAgICBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIHNldERhdG9zQnlQYXNzKGRhdG9zKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUxBWV9TQ1JPTExfMyA9IDUwO1xyXG5cclxuZnVuY3Rpb24gYnJlYWtlYWJsZVRleHQodGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGw7XHJcbmZ1bmN0aW9uIGJyZWFrZWFibGVUZXh0KHRleHQ6IHN0cmluZyB8IG51bGwsIGRpY2Npb25hcmlvPzogeyBbY2xhdmU6IHN0cmluZ106IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XHJcbiAgICBpZiAodHlwZW9mIHRleHQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIG51bGw7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXC8vZywgXCIvXFx1MjA2M1wiKS5yZXBsYWNlKC9cXC9cXHUyMDYzKFxcdylcXGIvZywgJy8kMScpO1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvX19fKi9nLCAodG9kbykgPT4gYFske3RvZG99XWApLnJlcGxhY2UoL1xcQCM/W1xcdy1dK0AvZywgKHRvZG8pID0+IGBbJHt0b2RvfV1gKTtcclxuICAgIGlmICghZGljY2lvbmFyaW8gfHwgdHJ1ZSkgcmV0dXJuIHRleHQ7XHJcbiAgICAvKlxyXG4gICAgcmV0dXJuIDxzcGFuPntwYXJ0ZXMubWFwKChwYXJ0ZTpzdHJpbmcsIGk6bnVtYmVyKSA9PiA8c3BhbiBzdHlsZT17aSUyPT0xP3t0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifTp7fX0+IHtwYXJ0ZStcIiBcIn0gPC9zcGFuPil9PC9zcGFuPlxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEJyZWFrZWFibGVUZXh0ID0gUmVhY3QubWVtbyhmdW5jdGlvbiBCcmVha2VhYmxlVGV4dChwcm9wczoge1xyXG4gICAgdGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyxcclxuICAgIGZvclBrPzogRm9yUGssXHJcbn0pIHtcclxuICAgIGNvbnN0IHsgdGV4dCwgY2xhc3NOYW1lLCBzdHlsZSB9ID0gcHJvcHM7XHJcblxyXG4gICAgLy8gQ29tb2RpbmVzIGNsw6FzaWNvcyBwcmVzZW50ZXMgZW4gZWwgdGV4dG8gKGVqOiBAcmVzcHMxQCAtPiBcInJlc3BzMVwiKVxyXG4gICAgY29uc3QgY29tb2RpbmVzSW50ZXJlcyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gXCJzdHJpbmdcIiB8fCAhdGV4dC5pbmNsdWRlcygnQCcpKSByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRleHQubWF0Y2goL0AoW2EtekEtWjAtOV8tXSspQC9nKTtcclxuICAgICAgICBpZiAoIW1hdGNoZXMpIHJldHVybiBbXTtcclxuICAgICAgICBjb25zdCBpZHM6IElkQ29tb2RpbltdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtYXRjaGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIW0uc3RhcnRzV2l0aCgnQCMnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBtLnNsaWNlKDEsIC0xKSBhcyBJZENvbW9kaW47XHJcbiAgICAgICAgICAgICAgICBpZiAoaWRzLmluZGV4T2YoaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWRzO1xyXG4gICAgfSwgW3RleHRdKTtcclxuXHJcbiAgICAvLyBTZWxlY3RvciBncmFudWxhciBjb24gc2hhbGxvd0VxdWFsOiBzw7NsbyBzdXNjcmliZSB5IHJlLWV2YWzDumEgc2kgY2FtYmlhbiBTVVMgY29tb2RpbmVzXHJcbiAgICBjb25zdCBjb21vZGluZXNWYWxvcmVzID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHtcclxuICAgICAgICBpZiAoY29tb2RpbmVzSW50ZXJlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlQ29tb2RpbmVzID0gc3RhdGU/Lm9wY2lvbmVzPy5jb21vZGluZXMgfHwgY29tb2RpbmVzSW5pY2lhbGVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdGFkbzogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21vZGluZXNJbnRlcmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gY29tb2RpbmVzSW50ZXJlc1tpXTtcclxuICAgICAgICAgICAgcmVzdWx0YWRvW2lkXSA9IHN0b3JlQ29tb2RpbmVzW2lkXSA/PyBjb21vZGluZXNJbmljaWFsZXNbaWRdID8/ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gICAgfSwgc2hhbGxvd0VxdWFsKTtcclxuXHJcbiAgICBjb25zdCByZWR1eEZvclBrID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBDYXNvU3RhdGUpID0+IHN0YXRlPy5vcGNpb25lcz8uZm9yUGspO1xyXG4gICAgY29uc3QgZm9yUGsgPSBwcm9wcy5mb3JQayB8fCByZWR1eEZvclBrO1xyXG5cclxuICAgIC8vIFZhcmlhYmxlIGRlIGVzdGFkbyBxdWUgc2UgYWN0dWFsaXphIGNhZGEgdmV6IHF1ZSBsbGVnYSB1biBjYW1iaW8gZGUgdW5hIHZhcmlhYmxlIGRlIGludGVyw6lzXHJcbiAgICBjb25zdCBbdmFsb3Jlc1ZhcmlhYmxlcywgc2V0VmFsb3Jlc1ZhcmlhYmxlc10gPSB1c2VTdGF0ZTx7IFtub21icmVWYXJpYWJsZTogc3RyaW5nXTogYW55IH0+KHt9KTtcclxuXHJcbiAgICAvLyBWYXJpYWJsZXMgZGUgaW50ZXLDqXM6IGVsIG5vbWJyZSBkZSB2YXJpYWJsZSBpbmRpY2FkbyBkZXNwdcOpcyBkZSAjIGRlbnRybyBkZSBsb3MgYXJyb2JhcyAoZWo6IEAjZWRhZEAgLT4gXCJlZGFkXCIpXHJcbiAgICBjb25zdCB2YXJpYWJsZXNJbnRlcmVzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ICE9PSBcInN0cmluZ1wiKSByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRleHQubWF0Y2goL0AjKFteQF0rKUAvZyk7XHJcbiAgICAgICAgaWYgKCFtYXRjaGVzKSByZXR1cm4gW107XHJcbiAgICAgICAgY29uc3QgdmFyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IG1hdGNoZXNbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbS5tYXRjaCgvXkAjKFtcXHctXSspQCQvKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YXJOYW1lID0gbWF0Y2hbMV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFycy5pbmRleE9mKHZhck5hbWUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcnMucHVzaCh2YXJOYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFycztcclxuICAgIH0sIFt0ZXh0XSk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIXRleHQgfHwgdmFyaWFibGVzSW50ZXJlcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXI6IExpc3RlbmVyQ2FtYmlvVmFyaWFibGUgPSAodmFyTW9kaWZpY2FkYSwgbnVldm9WYWxvciwgX2ZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcykgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaHVib0NhbWJpbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBudWV2b3NWYWxvcmVzOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhcmlhYmxlc0ludGVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJOYW1lID0gdmFyaWFibGVzSW50ZXJlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFyTmFtZSBpbiByZXNwdWVzdGFzQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSByZXNwdWVzdGFzQXVtZW50YWRhc1t2YXJOYW1lIGFzIElkVmFyaWFibGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBudWV2b3NWYWxvcmVzW3Zhck5hbWVdID0gKHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycpID8gU3RyaW5nKHZhbCkgOiAnLi4uLi4uLi4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodWJvQ2FtYmlvID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFodWJvQ2FtYmlvICYmIHZhcmlhYmxlc0ludGVyZXMuaW5kZXhPZih2YXJNb2RpZmljYWRhKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIG51ZXZvc1ZhbG9yZXNbdmFyTW9kaWZpY2FkYV0gPSAobnVldm9WYWxvciAhPSBudWxsICYmIG51ZXZvVmFsb3IgIT09ICcnKSA/IFN0cmluZyhudWV2b1ZhbG9yKSA6ICcuLi4uLi4uLic7XHJcbiAgICAgICAgICAgICAgICBodWJvQ2FtYmlvID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGh1Ym9DYW1iaW8pIHtcclxuICAgICAgICAgICAgICAgIHNldFZhbG9yZXNWYXJpYWJsZXMocHJldiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dDogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gcHJldikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0W2tdID0gcHJldltrXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIGluIG51ZXZvc1ZhbG9yZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFtrXSA9IG51ZXZvc1ZhbG9yZXNba107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBkZXN1c2NyaWJpciA9IHN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyLCB2YXJpYWJsZXNJbnRlcmVzKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBkZXN1c2NyaWJpcigpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbdGV4dCwgdmFyaWFibGVzSW50ZXJlc10pO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgbGV0IHByb2Nlc2FkbyA9IHRleHQucmVwbGFjZSgvXFwvL2csIFwiL1xcdTIwNjNcIikucmVwbGFjZSgvXFwvXFx1MjA2MyhcXHcpXFxiL2csICcvJDEnKTtcclxuICAgIHByb2Nlc2FkbyA9IHByb2Nlc2Fkby5yZXBsYWNlKC9fX18qL2csICh0b2RvKSA9PiBgWyR7dG9kb31dYCk7XHJcblxyXG4gICAgY29uc3QgcGFydGVzID0gcHJvY2VzYWRvLnNwbGl0KC8oQCM/W1xcdy1dK0ApL2cpO1xyXG4gICAgY29uc3QgY29udGVuaWRvID0gcGFydGVzLm1hcCgocGFydGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBwYXJ0ZS5tYXRjaCgvXkAoIz8pKFtcXHctXSspQCQvKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgY29uc3QgdGllbmVIYXNoID0gbWF0Y2hbMV0gPT09ICcjJztcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBtYXRjaFsyXTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2YWxvcjogYW55ID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgLy8gMS4gU2kgZXMgdmFyaWFibGUgY29uICMsIGJ1c2NhciBlbCB2YWxvciBkZSBsYSB2YXJpYWJsZSBpbmRpY2FkYSBkZXNwdcOpcyBkZSAjIGVuIGVsIGVzdGFkbyBkZWwgbGlzdGVuZXIgKGFjdHVhbGl6YWRvIGRlc2RlIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKVxyXG4gICAgICAgICAgICBpZiAodGllbmVIYXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsb3Jlc1ZhcmlhYmxlc1tpZF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbG9yID0gdmFsb3Jlc1ZhcmlhYmxlc1tpZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIDIuIFNpIHRpZW5lICMgeSBhw7puIG5vIGVzdMOhIGRlZmluaWRvLCBidXNjYXIgZGlyZWN0YW1lbnRlIGVuIHJlc3B1ZXN0YXNBdW1lbnRhZGFzXHJcbiAgICAgICAgICAgIGlmICh2YWxvciA9PT0gdW5kZWZpbmVkICYmIHRpZW5lSGFzaCAmJiBmb3JQaykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzPy5baWQgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsb3IgPSBTdHJpbmcodmFsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmFyIGVycm9yIHNpIG5vIHNlIHB1ZG8gYWNjZWRlciBhIHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gMy4gQnVzY2FyIGVuIGNvbW9kaW5lcyAoUmVkdXggZ3JhbnVsYXIgbyBjb21vZGluZXNJbmljaWFsZXMpXHJcbiAgICAgICAgICAgIGlmICh2YWxvciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxvciA9IGNvbW9kaW5lc1ZhbG9yZXMgPyBjb21vZGluZXNWYWxvcmVzW2lkXSA6IGNvbW9kaW5lc0luaWNpYWxlc1tpZCBhcyBJZENvbW9kaW5dO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsb3IgIT09IHVuZGVmaW5lZCAmJiB2YWxvciAhPT0gbnVsbCAmJiB2YWxvciAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGllbmVIYXNoICYmICh2YWxvciA9PT0gJycgfHwgdmFsb3IgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJy4uLi4uLi4uJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodmFsb3IgIT09IHVuZGVmaW5lZCAmJiB2YWxvciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2luZGV4fSBzdHlsZT17eyBjb2xvcjogJ3JlZCcgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAge2BObyBzZSBlbmNvbnRyw7MgJHtwYXJ0ZX1gfVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFydGU7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWV9IHN0eWxlPXtzdHlsZX0+e2NvbnRlbmlkb308L3NwYW4+O1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCRlZhck5hbWVzKHNhbHRvOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBjb25zdCBhcm1vTm9tU2FsdG8gPSBzYWx0bz8uc3Vic3RyaW5nKDAsIDIpID09ICdGOicgPyBzYWx0by5zbGljZSgyKSA6IHNhbHRvO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBsaXN0bzogJyRCLkY6JyArIGFybW9Ob21TYWx0byBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIGFncmVnYXI6ICckQi5GOicgKyBhcm1vTm9tU2FsdG8gKyAnX2FncmVnYXInIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgaWRGb3JtdWxhcmlvOiAnRjonICsgYXJtb05vbVNhbHRvIGFzIElkRm9ybXVsYXJpb1xyXG4gICAgfTtcclxufVxyXG5cclxuY29uc3QgVkVSX0RPTUlOSU8gPSBmYWxzZTsgLy8gZWwgZW5jdWVzdGFkb3Igbm8gbmVjZXNpdGEgdmVyIGVsIGRvbWluaW8gZW4gY2FkYSBlbmN1ZXN0YSBwb3JxdWUgZWwgZG9taW5pbyBkZXBlbmRlIGRlbCDDoXJlYSB5IHNlIGRlZHVjZSBkZWwgcHJpbWVyIGTDrWdpdG8gZGVsIG7Dum1lcm8gZGUgZW5jdWVzdGFcclxuLy8gbm8gcG9uZXIgVkVSX0RPTUlOSU8gZW4gdHJ1ZSwgY2FtYmlhciBwb3IgdW5hIHZhcmlhYmxlIHF1ZSBzZSBmaWplIHNpIGVsIERNIGVzdMOhIGVuIG1vZG8gcHJ1ZWJhIG8gZW4gbW9kbyBcImRpc2XDsW8gY29uY2VwdHVhbFwiXHJcblxyXG5jb25zdCBJRF9CT1RPTl9WT0xWRVJfSERSID0gJ2JvdG9uLXZvbHZlci1oZHInO1xyXG5jb25zdCBJRF9CT1RPTl9DRVJSQVIgPSAnYm90b24tY2VycmFyLWVuY3Vlc3RhJztcclxuXHJcbnZhciBkZWJlU2FsdGFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+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+IHtcclxuICAgIHZhciBmb3Jtc1ZpdmllbmRhID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1BhZHJlW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zID0gKGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKSkuYXJyYXkoKTtcclxuICAgIHZhciB4ID0gbGlrZUFyKHVhRGVmLmhpamFzKS5maWx0ZXIodWFIaWphID0+XHJcbiAgICAgICAgLy9kZXNjYXJ0byB1YXMgcXVlIG5vIGVzdMOpbiBlbiBuaW5ndW4gZm9ybVxyXG4gICAgICAgIGFycmF5RXN0cnVjdHVyYUZvcm11bGFyaW9zLmZpbHRlcigoaW5mb0Zvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGluZm9Gb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy5pZF9jYXNpbGxlcm8gYXMgSWRGb3JtdWxhcmlvKVxyXG4gICAgICAgICkubGVuZ3RoID4gMFxyXG4gICAgKS5tYXAodWFIaWphID0+IChcclxuICAgICAgICB1YUhpamEgPT0gbnVsbCA/IG51bGwgOlxyXG4gICAgICAgICAgICBodG1sLmRpdih7IGNsYXNzOiAndWEtaGlqYXMnIH0sIFtcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHVhSGlqYS51bmlkYWRfYW5hbGlzaXMpLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5kaXYoXHJcbiAgICAgICAgICAgICAgICAgICAgbGlrZUFyKHJbdWFIaWphLnVuaWRhZF9hbmFsaXNpc10gfHwgW10pLm1hcCgocmVzcHVlc3Rhc0hpamEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IE51bWJlcihpKSArIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrSGlqYVBhcmNpYWwgPSB7IC4uLmZvclBrUGFkcmUsIFt1YUhpamEucGtfYWdyZWdhZGFdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtQYWRyZVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0gOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWwuZGl2KHsgY2xhc3M6ICdudW1lcmFkb3ItdWEnIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHsgY2xhc3M6ICdib3RvbmVzLXVhJyB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoeyBjbGFzczogJ251bWVyby11YScgfSwgbnVtLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZvcm1EZWYgPT4gZm9ybURlZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YUhpamEudW5pZGFkX2FuYWxpc2lzICYmIGZvcm1zVml2aWVuZGEuaW5jbHVkZXMoZm9ybURlZi5jYXNpbGxlcm9zLmlkX2Nhc2lsbGVybyBhcyBJZEZvcm11bGFyaW8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChfZm9ybURlZiwgZm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvclBrID0geyAuLi5mb3JQa0hpamFQYXJjaWFsLCBmb3JtdWxhcmlvIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tGb3JtID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmVlZGJhY2tGb3JtID8gaHRtbC5kaXYoe30sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodG1sLmJ1dHRvbigodWFIaWphISkucGtfYWdyZWdhZGErXCIgb2s6IFwiKyhOdW1iZXIoaSkrMSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uRm9ybXVsYXJpb0NvblJlc3VtZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjYWxjdWxhckFjdHVhbEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIG51bSwgbnVsbCwgZm9ybXVsYXJpbywgciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNhbGN1bGFyRGlzYWJsZWRCRihjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG51bSwgZm9ybXVsYXJpbywgcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRlc3BsaWVndWVPY3VsdGE6IGZhbHNlLCBleHByZXNpb25faGFiaWxpdGFyX2pzOiAnJywgbm9tYnJlOiBmb3JtdWxhcmlvLCBhY2xhcmFjaW9uOiBudWxsLCBzYWx0bzogZm9ybXVsYXJpbyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQa1BhZHJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmNhc2lsbGVyb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXJyYXkoKS5tYXAoeCA9PiB4ID09IG51bGwgPyBudWxsIDogeCkucmV2ZXJzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYm90b25lc0RlbEZvcm11bGFyaW8ocmVzcHVlc3Rhc0hpamEsIHVhSGlqYS51bmlkYWRfYW5hbGlzaXMsIGVzdHJ1Y3R1cmEsIGZvclBrSGlqYVBhcmNpYWwsIGZlZWRiYWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCkubWFwKHggPT4geCA9PSBudWxsID8gbnVsbCA6IHgpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICApKS5hcnJheSgpLm1hcCh4ID0+IHggPT0gbnVsbCA/IG51bGwgOiB4KTtcclxuICAgIHJldHVybiBodG1sLmRpdigvKntzdHlsZTonZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3cnfSwqL3gpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0b0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBUZXh0bywgZm9yUGs6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IGNhc2lsbGVybywgZm9yUGsgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gICAgdmFyIGhhYmlsaXRhZG9yID0gY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPyBnZXRGdW5jaW9uSGFiaWxpdGFyKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzKSA6ICgpID0+IHRydWU7XHJcbiAgICB2YXIgeyBtb2RvRGVzcGxpZWd1ZSB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICB2YXIgaWQgPSBgdGV4dG8tJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHZhciBlc1Jlc3VtZW5Gb3JtdWxhcmlvID0gY2FzaWxsZXJvLmNhc2lsbGVybyA9PSAnUmVzRm9yJyBhcyBJZENhc2lsbGVybzsgLy8gVE9ETzogQ2FtYmlhIGVzdG8gcXVlIGVzdMOhIGphcmNvZGVhZG8uXHJcbiAgICBpZiAoZXNSZXN1bWVuRm9ybXVsYXJpbykge1xyXG4gICAgICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICAgICAgaWQsIGRpcmVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgX2ZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zdHlsZS5kaXNwbGF5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHJlc3B1ZXN0YXMgc29uIHJlc3B1ZXN0YXNSYWl6IHBvcnF1ZSBSZXNGb3IgZXN0w6EgZW4gZWwgZm9ybSBwcGFsXHJcbiAgICAgICAgICAgICAgICBpZiAoclsncmVzdW1lbkVzdGFkbyddIGFzIFJlc3VtZW5Fc3RhZG8gPT0gJ3ZhY2lvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLnRleHRDb250ZW50ID0gXCJyZWxldmFtaWVudG8gc2luIGVtcGV6YXJcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8udGV4dENvbnRlbnQgPSBcInJlbGV2YW1pZW50byBlbXBlemFkb1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcyB9ID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8uYXBwZW5kQ2hpbGQoYm90b25lc0RlbEZvcm11bGFyaW8ociwgdW5pZGFkX2FuYWxpc2lzLCBlc3RydWN0dXJhLCBmb3JQaywgZmVlZGJhY2tBbGwpLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB2YXIgaXIgPSAoZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIpID0+IHtcclxuICAgICAgICAvLyB2YXIgbnVldmFGb3JQaz17Li4uZm9yUGssIGZvcm11bGFyaW86aWRGb3JtdWxhcmlvRGVzdGlub307XHJcbiAgICAgICAgLy8gbnVldmFGb3JQa1tudWV2b0NhbXBvUGtdID0gZGVmQm90b24ubnVtXHJcbiAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IGRlZkJvdG9uLmZvclBrIH0pO1xyXG4gICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBkZWZCb3Rvbi5mb3JQaywgYXBpbGFyVnVlbHRhOiB0cnVlIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2Ake2lkfS1leHRlcm5vYH1cclxuICAgICAgICBjYXNpbGxlcm89e2Nhc2lsbGVyb31cclxuICAgID5cclxuICAgICAgICA8RW5jYWJlemFkb0Rlc3BsaWVndWUgY2FzaWxsZXJvPXtjYXNpbGxlcm99IGxlZXI9e2ZhbHNlfSBmb3JQaz17Zm9yUGt9IC8+XHJcbiAgICAgICAgPGRpdiBpZD17aWR9IHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fT48L2Rpdj5cclxuICAgICAgICB7ZXNSZXN1bWVuRm9ybXVsYXJpbyA/XHJcbiAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD1cImJvdG9uLWlyLXJlc3VtZW4tZm9ybXVsYXJpb1wiIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPmlyIChpbnRlcm5vKTwvQnV0dG9uPlxyXG4gICAgICAgICAgICA6IG51bGx9XHJcblxyXG4gICAgPC9EZXNwbGVnYXJDYXNpbGxlcm8+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZpbHRyb0Rlc3BsaWVndWUocHJvcHM6IHsgZmlsdHJvOiBGaWx0cm8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBmaWx0cm8gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtmaWx0cm99PlxyXG4gICAgICAgIDxEZXNwbGllZ3VlRW5jYWJlemFkbyBjYXNpbGxlcm89e2ZpbHRyb30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG5mdW5jdGlvbiBDb25zaXN0ZW5jaWFEZXNwbGllZ3VlKHByb3BzOiB7IGNhc2lsbGVybzogQ29uc2lzdGVuY2lhLCBmb3JQazogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgY2FzaWxsZXJvLCBmb3JQayB9ID0gcHJvcHM7XHJcbiAgICB2YXIgaGFiaWxpdGFkb3IgPSBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/IGdldEZ1bmNpb25IYWJpbGl0YXIoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMpIDogKCkgPT4gdHJ1ZTtcclxuICAgIHZhciB7IG1vZG9EZXNwbGllZ3VlIH0gPSB1c2VTZWxlY3RvclZpdmllbmRhKGZvclBrKTtcclxuICAgIHZhciBpZCA9IGBjb25zaXN0ZW5jaWEtJHtjYXNpbGxlcm8uaWRfY2FzaWxsZXJvfWA7XHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7IGlkLCBzdHlsZTogJ2Rpc3BsYXknLCBmdW46IChyOiBSZXNwdWVzdGFzKSA9PiBoYWJpbGl0YWRvcihyKSB8fCBtb2RvRGVzcGxpZWd1ZSA9PSAnbWV0YWRhdG9zJyA/ICdibG9jaycgOiAnbm9uZScgfSlcclxuICAgIHJldHVybiA8RGVzcGxlZ2FyQ2FzaWxsZXJvXHJcbiAgICAgICAgaWQ9e2lkfVxyXG4gICAgICAgIGNhc2lsbGVybz17Y2FzaWxsZXJvfVxyXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxyXG4gICAgPlxyXG4gICAgICAgIDxFbmNhYmV6YWRvRGVzcGxpZWd1ZSBjYXNpbGxlcm89e2Nhc2lsbGVyb30gbGVlcj17ZmFsc2V9IGZvclBrPXtmb3JQa30gLz5cclxuICAgIDwvRGVzcGxlZ2FyQ2FzaWxsZXJvPlxyXG59XHJcblxyXG50eXBlIERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIgPVxyXG4gICAgKHsgZm9yUGs6IEZvclBrLCBudW06IG51bWJlciwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBudW1iZXIsIGFjdHVhbDogYm9vbGVhbiwgcHJldmlvOiBmYWxzZSwgZXNBZ3JlZ2FyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIGVzQ29uZmlybWFyOiB0cnVlIH0gfFxyXG4gICAgeyBmb3JQazogRm9yUGssIG51bTogbnVtYmVyLCBhY3R1YWw6IGJvb2xlYW4sIHByZXZpbzogZmFsc2UsIHBlcm1pdGVCb3JyYXI6IGJvb2xlYW4gfSB8XHJcbiAgICB7IGZvclBrOiBGb3JQaywgbnVtOiBmYWxzZSwgYWN0dWFsOiBib29sZWFuLCBwcmV2aW86IGJvb2xlYW4sIHVuaWNvOiB0cnVlIH0pXHJcbiAgICAmIHsgZXNDb25maXJtYXI/OiB0cnVlLCBlc0FncmVnYXI/OiB0cnVlLCBwZXJtaXRlQm9ycmFyPzogYm9vbGVhbiwgcGVybWl0ZUJvcnJhckdhYmluZXRlPzogYm9vbGVhbiwgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkLCBlc3RhZG9Cb3Rvbj86IHN0cmluZyB9O1xyXG5cclxuXHJcbnZhciBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuID0gKFxyXG4gICAgZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsXHJcbiAgICBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBjYXNpbGxlcm86IHsgZGVzcGxpZWd1ZU9jdWx0YT86IGJvb2xlYW4gfCBudWxsLCBleHByZXNpb25faGFiaWxpdGFyX2pzPzogc3RyaW5nLCBhY2xhcmFjaW9uOiBzdHJpbmcgfCBudWxsLCBleHByZXNpb25faGFiaWxpdGFyPzogc3RyaW5nLCBub21icmU/OiBzdHJpbmcsIHNhbHRvOiBzdHJpbmcgfCBudWxsLCBlc3BlY2lhbD86IGFueSB9LFxyXG4gICAgZm9yUGtQYWRyZTogRm9yUGssXHJcbiAgICBpZEJ1dHRvbjogc3RyaW5nLFxyXG4gICAgZm9ybXVsYXJpb0FBYnJpcjogRm9ybXVsYXJpbyxcclxuICAgIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbz86IChkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpciwgZm9yUGtQYWRyZTogRm9yUGspID0+IHZvaWRcclxuKSA9PiB7XHJcbiAgICB2YXIgZm9yUGs6IEZvclBrID0gZGVmQm90b24uZm9yUGs7XHJcbiAgICB2YXIgc3VmaWpvSWRFbGVtZW50byA9IHRvUGxhaW5Gb3JQayhmb3JQaykgKyAoZGVmQm90b24uZXNDb25maXJtYXIgPyAnLWxpc3RvJyA6ICcnKTtcclxuICAgIHZhciBpZCA9IGBkaXYtYm90b24tZm9ybXVsYXJpby0ke3N1Zmlqb0lkRWxlbWVudG99YDtcclxuICAgIHZhciBlc3RhZG8gPSBmZWVkYmFja0Zvcm0ucmVzdW1lbjtcclxuICAgIHJldHVybiBodG1sLnRyKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBjbGFzczogXCJzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW9cIixcclxuICAgICAgICAkYXR0cnM6IHtcclxuICAgICAgICAgICAgXCJudWVzdHJvLXZhbGlkYXRvclwiOiBkZWZCb3Rvbi5hY3R1YWwgPyAnYWN0dWFsJyA6IGRlZkJvdG9uLnByZXZpbyA/ICd2YWxpZGEnIDogKGRlZkJvdG9uLmVzdGFkb0JvdG9uIHx8ICd0b2RhdmlhX25vJyksXHJcbiAgICAgICAgICAgIFwib2N1bHRhci1zYWx0ZWFkYVwiOiBjYXNpbGxlcm8uZGVzcGxpZWd1ZU9jdWx0YSA/IChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA/ICdJTkhBQklMSVRBUicgOiAnU0knKSA6ICdOTycsXHJcbiAgICAgICAgICAgIFwidGllbmUtdmFsb3JcIjogXCJOT1wiLFxyXG4gICAgICAgICAgICBcImRlZi1idXR0b25cIjogSlNPTi5zdHJpbmdpZnkoZGVmQm90b24pXHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGNhc2lsbGVyby5hY2xhcmFjaW9uID9cclxuICAgICAgICAgICAgaHRtbC50ZCh7IGNsYXNzOiBcImFjbGFyYWNpb25cIiB9LCBbYnJlYWtlYWJsZVRleHQoY2FzaWxsZXJvLmFjbGFyYWNpb24pXSlcclxuICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIGh0bWwudGQoe1xyXG4gICAgICAgICAgICBjb2xzcGFuOiAoZGVmQm90b24uZXNBZ3JlZ2FyIHx8IGRlZkJvdG9uLmVzQ29uZmlybWFyKSA/XHJcbiAgICAgICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuLmxlbmd0aCA/PyAxKSArIChjYXNpbGxlcm8uYWNsYXJhY2lvbiA/IDAgOiAxKVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgIC8vIGlkOmB2YXItJHtpZFZhcmlhYmxlfWAsXHJcbiAgICAgICAgICAgICAgICBpZDogYGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50OiBkZWZCb3Rvbi5hY3R1YWwgPyBcImNvbnRhaW5lZFwiIDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRlZkJvdG9uLmRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5lc0NvbmZpcm1hcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmQm90b24ubnVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uc2FsdG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBkZWZCb3Rvbi5udW0gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IDEgYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogZGVmQm90b24ubnVtIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkQnV0dG9uKSEgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nLCBKU09OLnN0cmluZ2lmeShkZWZCb3RvbikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXN1bWVuLWVzdGFkb1wiOiBlc3RhZG8gIT0gJ3ZhY2lvJyA/IGVzdGFkbyA6IGRlZkJvdG9uLmFjdHVhbCA/ICdhY3R1YWwnIDogZGVmQm90b24ucHJldmlvID8gZXN0YWRvIDogKGRlZkJvdG9uLmVzdGFkb0JvdG9uIHx8ICd0b2RhdmlhX25vJyksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAsIGNoaWxkcmVuOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlZkJvdG9uLmVzQWdyZWdhciA/ICdhZ3JlZ2FyJyA6IGRlZkJvdG9uLmVzQ29uZmlybWFyID8gJ0xpc3RvJyA6IGNhc2lsbGVyby5ub21icmUgKyAnICcgKyAoZGVmQm90b24ubnVtIHx8ICcnKSksXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zdmcoeyBmb2N1c2FibGU6IGZhbHNlLCB2aWV3Ym94OiBcIjAgMCAyNCAyNFwiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLCBzdHlsZTogc3R5bGVUb0Nzcyh7IGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSkgfSwgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiAoZGVmQm90b24uZXNBZ3JlZ2FyID8gbWF0ZXJpYWxJb0ljb25zU3ZnUGF0aC5BZGQgOiBkZWZCb3Rvbi5lc0NvbmZpcm1hciA/IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguQ2hlY2sgOiBjYXNpbGxlcm8uc2FsdG8gPyBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkZvcndhcmQgOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkV4aXRUb0FwcCksIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXIgfHwgZGVmQm90b24ucGVybWl0ZUJvcnJhckdhYmluZXRlID9cclxuICAgICAgICAgICAgICAgIEJ1dHRvbjIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJib3Rvbi1ib3JyYXItdWEtdmFjaWFcIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3ZnKHsgZm9jdXNhYmxlOiBmYWxzZSwgdmlld2JveDogXCIwIDAgMjQgMjRcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7IGQ6IG1hdGVyaWFsSW9JY29uc1N2Z1BhdGguRGVsZXRlRm9yZXZlciwgc3R5bGU6IHN0eWxlVG9Dc3MoeyBmaWxsOiAnY3VycmVudENvbG9yJyB9KSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5wZXJtaXRlQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5udW0gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGFncmVnYXIsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogZm9yUGtQYWRyZSwgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZkJvdG9uLnBlcm1pdGVCb3JyYXJHYWJpbmV0ZSAmJiBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZGlyQ29uZmlybWFjaW9uQm9ycmFkbyhkZWZCb3RvbiwgZm9yUGtQYWRyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgKGRlZkJvdG9uLmVzQ29uZmlybWFyICYmIGNhc2lsbGVyby5zYWx0byAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1snJEIuRjonICsgKGNhc2lsbGVyby5zYWx0by5zdWJzdHJpbmcoMCwgMikgPT0gJ0Y6JyA/IGNhc2lsbGVyby5zYWx0by5zbGljZSgyKSA6IGNhc2lsbGVyby5zYWx0bykgYXMgSWRWYXJpYWJsZV0gIT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICBCdXR0b24yKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYm90b24tZGVzaGFjZXItbGlzdG9cIixcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudDogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IG1hcmdpbkxlZnQ6ICc4cHgnIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXNoYWNlciBMaXN0b1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLnN2Zyh7IGZvY3VzYWJsZTogZmFsc2UsIHZpZXdib3g6IFwiMCAwIDI0IDI0XCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgbWFyZ2luTGVmdDogJzRweCcsIGhlaWdodDogJzIwcHgnLCB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyB9KSB9LCBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnBhdGgoeyBkOiBtYXRlcmlhbElvSWNvbnNTdmdQYXRoLkRlbGV0ZUZvcmV2ZXIsIHN0eWxlOiBzdHlsZVRvQ3NzKHsgZmlsbDogJ2N1cnJlbnRDb2xvcicgfSkgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGlzdG8sIGFncmVnYXIgfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBhZ3JlZ2FyLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgKGRlZkJvdG9uLm51bSAhPT0gZmFsc2UgJiYgIWRlZkJvdG9uLmVzQWdyZWdhciAmJiAhZGVmQm90b24uZXNDb25maXJtYXIgP1xyXG4gICAgICAgICAgICAoY2FzaWxsZXJvLmVzcGVjaWFsPy5jYW1wb3NSZXN1bWVuID8/IFsvKmRlZkJvdG9uLm51bS50b1N0cmluZygpKi9dKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAoY2FtcG86IHN0cmluZykgPT4gaHRtbC50ZCgocmVzcHVlc3Rhc0F1bWVudGFkYXNbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdW2RlZkJvdG9uLm51bSAtIDFdW2NhbXBvIGFzIElkVmFyaWFibGVdID8/ICcnKS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogbnVsbClcclxuICAgICAgICAvLyBodG1sLmRpdih7Y2xhc3M6J2lubGluZS1kaWFsb2cnLCAkYXR0cnM6e1wiaW5saW5lLWRpYWxvZy1vcGVuXCI6IGNvbmZpcm1hckZvcnphcklyID09IGRlZkJvdG9uLm51bT8ndmlzaWJsZSc6J2hpZGRlbid9fSxbICAgICAgICAgICAgICAgIF0pXHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIHtkZWZCb3Rvbi5lc0FncmVnYXI/PD4gPHNwYW4+ICA8L3NwYW4+IDxCdXR0b25cclxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID48SUNPTi5DaGVjay8+PC9CdXR0b24+PC8+Om51bGx9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKi9cclxuICAgIF0pLmNyZWF0ZSgpXHJcbn1cclxuXHJcbnZhciBidXNjYXJIbm9zRm9ybXVsYXJpbyA9IChpZEZvcm11bGFyaW9EZXN0aW5vOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHVhID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9EZXN0aW5vXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcylcclxuICAgICAgICAuZmlsdGVyKChpbmZvRm9ybXVsYXJpbzogSW5mb0Zvcm11bGFyaW8sIF9pZEZvcm06IElkRm9ybXVsYXJpbykgPT5cclxuICAgICAgICAgICAgaW5mb0Zvcm11bGFyaW8uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFcclxuICAgICAgICApLm1hcCgoX2luZm9Gb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbywgaWRGb3JtOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAgICAgICAgIGlkRm9ybVxyXG4gICAgICAgICkuYXJyYXkoKVxyXG59XHJcblxyXG52YXIgY2hlY2tGb3Jtc1ZhY2lvcyA9IChmb3JtczogSWRGb3JtdWxhcmlvW10sIGZlZWRiYWNrQWxsOiB7XHJcbiAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxufSwgZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICByZXR1cm4gZm9ybXMuZmlsdGVyKChmb3JtOiBJZEZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICBsZXQgbXlmb3JQayA9IHsgLi4uZm9yUGssIGZvcm11bGFyaW86IGZvcm0gfTtcclxuICAgICAgICB2YXIgZmVlZGJhY2sgPSBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsobXlmb3JQayldO1xyXG4gICAgICAgIHJldHVybiBmZWVkYmFjay5yZXN1bWVuICE9ICd2YWNpbydcclxuICAgIH0pLmxlbmd0aCA9PSAwXHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUocHJvcHM6IHsgY2FzaWxsZXJvOiBCb3RvbkZvcm11bGFyaW8sIGZvcm11bGFyaW86IEZvcm11bGFyaW8sIGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICB2YXIgeyBjYXNpbGxlcm8sIGZvclBrIH0gPSBwcm9wcztcclxuICAgIHZhciBoYWJpbGl0YWRvciA9IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzID8gZ2V0RnVuY2lvbkhhYmlsaXRhcihjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcl9qcykgOiAoKSA9PiB0cnVlO1xyXG4gICAgdmFyIHsgb3BjaW9uZXMgfSA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIHsgbGlzdG86IEJGX2xpc3RvLCBhZ3JlZ2FyOiBCRl9hZ3JlZ2FyLCBpZEZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfSA9IGdldEJGVmFyTmFtZXMoY2FzaWxsZXJvLnNhbHRvKTtcclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpb0FBYnJpciB9ID0gdXNlU2VsZWN0b3IoKF9zdGF0ZTogQ2Fzb1N0YXRlKSA9PiAoe1xyXG4gICAgICAgIGZvcm11bGFyaW9BQWJyaXI6IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub10uY2FzaWxsZXJvcyxcclxuICAgIH0pKTtcclxuICAgIHZhciBzdWZpam9JZEVsZW1lbnRvID0gdG9QbGFpbkZvclBrKGZvclBrKTtcclxuICAgIC8qXHJcbiAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgaWQ6YGRpdi1ib3Rvbi1mb3JtdWxhcmlvLSR7c3VmaWpvSWRFbGVtZW50b31gLCBcclxuICAgICAgICBhdHRyOidlc3RhLWluaGFiaWxpdGFkYScsIFxyXG4gICAgICAgIC8vIGZ1bjogKHI6UmVzcHVlc3Rhcyk9PmhhYmlsaXRhZG9yKHIpPydTSSc6J05PJ1xyXG4gICAgICAgIGZ1bjogKF9yOlJlc3B1ZXN0YXMpPT4nTk8nXHJcbiAgICB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvPEhUTUxCdXR0b25FbGVtZW50Pih7XHJcbiAgICAgICAgaWQ6YGJvdG9uLWZvcm11bGFyaW8tJHtzdWZpam9JZEVsZW1lbnRvfWAsIFxyXG4gICAgICAgIHByb3A6J2Rpc2FibGVkJywgXHJcbiAgICAgICAgLy8gZnVuOiAocjpSZXNwdWVzdGFzKT0+IWhhYmlsaXRhZG9yKHIpXHJcbiAgICAgICAgZnVuOiAoX3I6UmVzcHVlc3Rhcyk9PmZhbHNlXHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB2YXIgW2NvbmZpcm1hckZvcnphcklyLCBzZXRDb25maXJtYXJGb3J6YXJJcl0gPSB1c2VTdGF0ZTxEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyIHwgZmFsc2UgfCBudWxsPihudWxsKTtcclxuICAgIHZhciBbY29uZmlybWFjaW9uQm9ycmFkbywgc2V0Q29uZmlybWFjaW9uQm9ycmFkb10gPSB1c2VTdGF0ZTx7ZGVmQm90b246IERlZmluaWNpb25Gb3JtdWxhcmlvQWJyaXIsIGZvclBrUGFkcmU6IEZvclBrLCBkYXRvczogYW55fSB8IG51bGw+KG51bGwpO1xyXG4gICAgdmFyIFtmcmFzZUJvcnJhZG8sIHNldEZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICB2YXIgW2Vycm9yRnJhc2VCb3JyYWRvLCBzZXRFcnJvckZyYXNlQm9ycmFkb10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICB2YXIgcGVybWl0ZUJvcnJhckdhYmluZXRlID0gZ2V0RGF0b3NCeVBhc3MoKS5wZXJtaXRlQm9ycmFyRWxlbWVudG9zVUEgPz8gZmFsc2U7XHJcbiAgICB2YXIgcGVkaXJDb25maXJtYWNpb25Cb3JyYWRvID0gKGRlZkJvdG9uOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyLCBmb3JQa1BhZHJlOiBGb3JQaykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHtyZXNwdWVzdGFzfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlKVxyXG4gICAgICAgIHZhciBkYXRvc0hpam9zID0gcmVzcHVlc3Rhc1tmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpc11bKGRlZkJvdG9uLm51bSB8fCAxKSAtIDFdO1xyXG4gICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8oeyBkZWZCb3RvbiwgZm9yUGtQYWRyZSwgZGF0b3M6IGRhdG9zSGlqb3MgfSk7XHJcbiAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTtcclxuICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG11bHRpcGxlRm9ybXVsYXJpb3MgPSBmb3JtdWxhcmlvQUFicmlyLnVuaWRhZF9hbmFsaXNpcyAhPSBwcm9wcy5mb3JtdWxhcmlvLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHZhciBudWV2b0NhbXBvUGsgPSBkZWZPcGVyYXRpdm8uZGVmVUFbZm9ybXVsYXJpb0FBYnJpci51bmlkYWRfYW5hbGlzaXNdLnBrO1xyXG4gICAgLy8gdmFyIHZhcl9uYW1lPSckQi4nK2Nhc2lsbGVyby5zYWx0bzsgLy9vcmlnaW5hbFxyXG4gICAgdmFyIGlkU2VjY2lvbiA9IGBzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8tJHtCRl9saXN0b31gO1xyXG4gICAgdmFyIGlkQnV0dG9uID0gYHNwZWNpYWwtYnV0dG9uLSR7aWRTZWNjaW9ufWA7XHJcbiAgICB2YXIgdmFyX25hbWVfcmVnaXN0cm8gPSBtdWx0aXBsZUZvcm11bGFyaW9zID8gQkZfYWdyZWdhciA6IEJGX2xpc3RvO1xyXG4gICAgcmVnaXN0cmFyRWxlbWVudG88SFRNTERpdkVsZW1lbnQ+KHtcclxuICAgICAgICBpZDogaWRTZWNjaW9uLFxyXG4gICAgICAgIHZhcmlhYmxlOiB2YXJfbmFtZV9yZWdpc3RybyxcclxuICAgICAgICBmb3JQazogZm9yUGssXHJcbiAgICAgICAgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja1JvdzogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGRpdjogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19saXN0byA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW0JGX2xpc3RvXT8uZXN0YWRvIHx8ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19hZ3JlZ2FyID0gbXVsdGlwbGVGb3JtdWxhcmlvcyA/IChmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9hZ3JlZ2FyXT8uZXN0YWRvIHx8ICd2YWxpZGEnKSA6ICd2YWxpZGEnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVzdGFkb19nZW5lcmFsID0gZXN0YWRvX2FncmVnYXIgIT09ICd2YWxpZGEnID8gZXN0YWRvX2FncmVnYXIgOiBlc3RhZG9fbGlzdG87XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAnbnVlc3Ryby12YWxpZGF0b3InLCBlc3RhZG9fZ2VuZXJhbCk7XHJcbiAgICAgICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGl2LCAndGllbmUtdmFsb3InLCBlc3RhZG9fZ2VuZXJhbCA9PT0gJ3ZhbGlkYScgPyAndmFsaWRvJyA6ICdOTycpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBsaXN0YURlQm90b25lc0FicmlyOiBEZWZpbmljaW9uRm9ybXVsYXJpb0FicmlyW10gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBlc1ZhckFjdHVhbCA9IGZlZWRiYWNrUm93LmFjdHVhbCA9PSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0bzsgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgIHZhciBlc1ZhckFjdHVhbCA9ICEhZmVlZGJhY2tSb3cuYWN0dWFsPy5zdGFydHNXaXRoKEJGX2xpc3RvKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCb3RvbkZvcm11bGFyaW9EZXNwbGllZ3VlIGVzVmFyQWN0dWFsICcgK2VzVmFyQWN0dWFsICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlRm9ybXVsYXJpb3MgJiYgY2FzaWxsZXJvLnNhbHRvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgbGV0IGRlZkZvcm11bGFyaW86SW5mb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zWydGOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkRm9ybXVsYXJpb107ICAgICAgLy9vcmlnaW5hbFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZGb3JtdWxhcmlvOiBJbmZvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvRGVzdGlub107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZlVBID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1tkZWZGb3JtdWxhcmlvLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzIV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmp1bnRvID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbZGVmRm9ybXVsYXJpby5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjYW50aWRhZEVzcGVyYWRhID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbY2FzaWxsZXJvLmV4cHJlc2lvbl9oYWJpbGl0YXIgYXMgSWRWYXJpYWJsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIHZhciBlc3RhZG9EZWxCb3RvbiA9IGZlZWRiYWNrUm93LmZlZWRiYWNrWyckQi5GOicrY2FzaWxsZXJvLnNhbHRvIGFzIElkVmFyaWFibGVdLmVzdGFkbyAgIC8vb3JpZ2luYWxcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXN0YWRvRGVsQm90b24gPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tCRl9saXN0b10uZXN0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JvdG9uRm9ybXVsYXJpb0Rlc3BsaWVndWUgZXN0YWRvRGVsQm90b24gJyArZXN0YWRvRGVsQm90b24gICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyA/IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0YURlQm90b25lc0FicmlyID0gbGlrZUFyKGNvbmp1bnRvKS5tYXAoKF8sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG51bTogbnVtYmVyID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KGksIGNvbmp1bnRvKSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudW0gfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1Ibm9zID0gYnVzY2FySG5vc0Zvcm11bGFyaW8oaWRGb3JtdWxhcmlvRGVzdGlubylcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRiYWNrID0gZmVlZGJhY2tBbGxbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1BY3R1YWwgPT0gbnVsbCAmJiBmZWVkYmFjay5yZXN1bWVuID09IFwidmFjaW9cIiAmJiBlc3RhZG9EZWxCb3RvbiA9PSAndmFsaWRhJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWN0dWFsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JQayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGNhbGN1bGFyQWN0dWFsQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgbnVtLCBudW1BY3R1YWwsIGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpbzogbnVtQWN0dWFsID09IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyOiBsaWtlQXIoY29uanVudG8pLmFycmF5KCkubGVuZ3RoID09IE51bWJlcihpKSArIDEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcm1zVmFjaW9zKGZvcm1Ibm9zLCBmZWVkYmFja0FsbCwgZm9yUGspICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYoY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvRGVzdGlubyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyR2FiaW5ldGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY2FsY3VsYXJEaXNhYmxlZEJGKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbnVtLCBpZEZvcm11bGFyaW9EZXN0aW5vLCByZXNwdWVzdGFzQXVtZW50YWRhcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RhZG9Cb3RvbjogZXN0YWRvX2dlbmVyYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUgLypcInB1ZWRlIGFncmVnYXIgLy9UT0RPIFZFUiBFU1RPXCIqLyAmJiAoY29uanVudG8gaW5zdGFuY2VvZiBBcnJheSB8fCBjb25qdW50byA9PSBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVldm9WYWxvclBrID0gKGNvbmp1bnRvID09IG51bGwgPyAwIDogY29uanVudG8ubGVuZ3RoKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8sIFtudWV2b0NhbXBvUGtdOiBudWV2b1ZhbG9yUGsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RvUHJlc2lvbmFkbyA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW0JGX2xpc3RvXSAhPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGViZUFncmVnYXJPbGlzdG8gPSBudW1BY3R1YWwgPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FudGlkYWRFc3BlcmFkYSA9PSBudWxsIHx8IGNhbnRpZGFkRXNwZXJhZGEgIT0gKGNvbmp1bnRvICE9IG51bGwgJiYgY29uanVudG8ubGVuZ3RoKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICFsaXN0b1ByZXNpb25hZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJiYgKGVzdGFkb0RlbEJvdG9uID09ICd2YWxpZGEnIHx8IGVzVmFyQWN0dWFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc0FncmVnYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFkb0JvdG9uOiBlc3RhZG9fZ2VuZXJhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGFEZUJvdG9uZXNBYnJpci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtOiBudWV2b1ZhbG9yUGsgLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNDb25maXJtYXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGRlYmVBZ3JlZ2FyT2xpc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjYWxjdWxhckRpc2FibGVkQkZBZ3JlZ2FyTGlzdG8oY29uZmlnU29ydGVvRm9ybXVsYXJpbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW9EZXN0aW5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFkb0JvdG9uOiBlc3RhZG9fZ2VuZXJhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JQayA9IHsgLi4ucHJvcHMuZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXNQcmV2aW9VbmljbyA9IGVzdGFkb19nZW5lcmFsID09ICd2YWxpZGEnIHx8IChmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZm9yUGspXT8ucmVzdW1lbiAhPSBudWxsICYmIGZlZWRiYWNrQWxsW3RvUGxhaW5Gb3JQayhmb3JQayldPy5yZXN1bWVuICE9ICd2YWNpbycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhRGVCb3RvbmVzQWJyaXIgPSBbeyBmb3JQaywgbnVtOiBmYWxzZSwgdW5pY286IHRydWUsIGFjdHVhbDogZXNWYXJBY3R1YWwsIHByZXZpbzogZXNQcmV2aW9VbmljbywgZXN0YWRvQm90b246IGVzdGFkb19nZW5lcmFsIH1dXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9kb3NMb3NCb3RvbmVzID0gbGlzdGFEZUJvdG9uZXNBYnJpci5tYXAoZGVmQm90b24gPT5cclxuICAgICAgICAgICAgICAgICAgICBib3RvbkZvcm11bGFyaW9Db25SZXN1bWVuKGRlZkJvdG9uLCBmZWVkYmFja0FsbFt0b1BsYWluRm9yUGsoZGVmQm90b24uZm9yUGspXSA/PyB7IHJlc3VtZW46ICd2YWNpbycgfSwgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2lsbGVybywgcHJvcHMuZm9yUGssIGlkQnV0dG9uLCBmb3JtdWxhcmlvQUFicmlyLCBwZWRpckNvbmZpcm1hY2lvbkJvcnJhZG9cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBsZXQgbm9tYnJlc0NhbXBvc1Jlc3VtZW4gPSBsaWtlQXIoKGNhc2lsbGVyby5lc3BlY2lhbD8uY2FtcG9zUmVzdW1lbiB8fCBbXSkpLmFycmF5KCkubWFwKGMgPT4gYyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaHRtbFNlY2Npb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFNlY2Npb24pITtcclxuICAgICAgICAgICAgICAgIGh0bWxTZWNjaW9uLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBodG1sU2VjY2lvbi5hcHBlbmRDaGlsZChodG1sLnRhYmxlKHsgY2xhc3M6IGB0YWJsZSB0YWJsZS1zdHJpcGVkICR7bm9tYnJlc0NhbXBvc1Jlc3VtZW4ubGVuZ3RoID8gJ3ctYXV0bycgOiAnJ31gIH0sIFtcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnRoZWFkKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC50cihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm8uYWNsYXJhY2lvbiA/IGh0bWwudGgoKSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLnRoKGNhc2lsbGVyby5ub21icmUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubm9tYnJlc0NhbXBvc1Jlc3VtZW4ubWFwKChub21icmVDYW1wbykgPT4gaHRtbC50aChub21icmVDYW1wbyBhcyBzdHJpbmcpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLnRib2R5KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9kb3NMb3NCb3RvbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVudHJhIGFsIGNhdGNoXCIpXHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQgPSAnZXN0bywgRkFMTMOJICcgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBpciA9IChkZWZCb3RvbjogRGVmaW5pY2lvbkZvcm11bGFyaW9BYnJpcikgPT4ge1xyXG4gICAgICAgIGlmICghY2FzaWxsZXJvLnNhbHRvKSB7XHJcbiAgICAgICAgICAgIG9wY2lvbmVzLm1vZG9EaXJlY3RvID9cclxuICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLlZPTFZFUl9IRFIoe30pKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbnVldmFGb3JQayA9IHsgLi4uZm9yUGssIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpb0Rlc3Rpbm8gfTtcclxuICAgICAgICAgICAgdmFyIHsgbGlzdG86IEJGX2xpc3RvLCBhZ3JlZ2FyOiBCRl9hZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgIGlmIChtdWx0aXBsZUZvcm11bGFyaW9zKSB7XHJcbiAgICAgICAgICAgICAgICAobnVldmFGb3JQayBhcyBhbnkpW251ZXZvQ2FtcG9Qa10gPSBkZWZCb3Rvbi5udW1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5lc0FncmVnYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvLCB7IGZvclBrOiBudWV2YUZvclBrIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IEJGX2FncmVnYXIsIHJlc3B1ZXN0YTogMSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEJ5UGFzcyhhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YSwgeyBmb3JQazogcHJvcHMuZm9yUGssIHZhcmlhYmxlOiBCRl9saXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBwcm9wcy5mb3JQaywgdmFyaWFibGU6IGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyIGFzIElkVmFyaWFibGUsIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX2FicmlyX2Zvcm11bGFyaW8sIHsgZm9yUGs6IG51ZXZhRm9yUGsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgYWJybyB1bm8gZXhpc3RlbnRlLCB0YW1iacOpbiByZXNldGVvIGVsIGxpc3RvIHBhcmEgZm9yemFyIHF1ZSB2dWVsdmFuIGEgYXByZXRhcmxvIHNpIGNhbWJpYW4gYWxnb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfbGlzdG8sIHJlc3B1ZXN0YTogbnVsbCBhcyB1bmtub3duIGFzIFZhbG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IHByb3BzLmZvclBrLCB2YXJpYWJsZTogQkZfbGlzdG8sIHJlc3B1ZXN0YTogMSBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwYXRjaChkaXNwYXRjaGVycy5DQU1CSUFSX0ZPUk1VTEFSSU8oeyBmb3JQazogbnVldmFGb3JQaywgYXBpbGFyVnVlbHRhOiB0cnVlIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpcm1hckZvcnphcklyKSB7IHNldENvbmZpcm1hckZvcnphcklyKGZhbHNlKSB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIDxEZXNwbGVnYXJDYXNpbGxlcm8gY2FzaWxsZXJvPXtjYXNpbGxlcm99PlxyXG4gICAgICAgIHttdWx0aXBsZUZvcm11bGFyaW9zICYmIDxzcGFuIGlkPXsndmFyLScgKyBCRl9hZ3JlZ2FyfSBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbWFyZ2luVG9wOiAnLTYwcHgnIH19Pjwvc3Bhbj59XHJcbiAgICAgICAgPHNwYW4gaWQ9eyd2YXItJyArIEJGX2xpc3RvfSBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbWFyZ2luVG9wOiAnLTYwcHgnIH19Pjwvc3Bhbj5cclxuICAgICAgICA8ZGl2IGlkPXtpZFNlY2Npb259PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwic3BlY2lhbC1idXR0b25cIiBpZD17aWRCdXR0b259XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXIoSlNPTi5wYXJzZSgoZXZlbnQudGFyZ2V0ISBhcyB1bmtub3duIGFzIEhUTUxCdXR0b25FbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2RlZi1idXR0b24nKSEpKVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgID5pciAoaW50ZXJubyk8L0J1dHRvbj5cclxuICAgICAgICA8RGlhbG9nXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm51ZXN0cm8tZGlhbG9nb1wiXHJcbiAgICAgICAgICAgIG9wZW49eyEhY29uZmlybWFyRm9yemFySXJ9XHJcbiAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldENvbmZpcm1hckZvcnphcklyKG51bGwpfVxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJudWVzdHJvLWRpYWxvZ29cIj5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5Pk5vIHNlIHB1ZWRlIGF2YW56YXIgYWwgc2lndWllbnRlIGZvcm11bGFyaW8uPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyB0ZXJtaW7DsyBkZSBjb250ZXN0YXIgbGFzIHByZWd1bnRhcyBjb3JyZXNwb25kaWVudGVzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+UXVpesOhcyBubyBjb3JyZXNwb25kZSBlbiBiYXNlIGEgbGFzIHJlc3B1ZXN0YXMgb2J0ZW5pZGFzPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IGNvbmZpcm1hckZvcnphcklyICYmIGlyKGNvbmZpcm1hckZvcnphcklyKX0+Zm9yemFyPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpID0+IHNldENvbmZpcm1hckZvcnphcklyKG51bGwpfT5FbnRlbmRpZG88L0J1dHRvbj5cclxuICAgICAgICA8L0RpYWxvZz5cclxuICAgICAgICB7Y29uZmlybWFjaW9uQm9ycmFkbyAmJiAoXHJcbiAgICAgICAgICAgIDxEaWFsb2cgb3Blbj17dHJ1ZX0gb25DbG9zZT17KCkgPT4geyBcclxuICAgICAgICAgICAgICAgIHNldENvbmZpcm1hY2lvbkJvcnJhZG8obnVsbCk7IFxyXG4gICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKCcnKTsgXHJcbiAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7IFxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dUaXRsZT5BZHZlcnRlbmNpYTogU2UgcGVyZGVyw6FuIGRhdG9zPC9EaWFsb2dUaXRsZT5cclxuICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2BFc3TDoSBwb3IgYm9ycmFyIGVsIGZvcm11bGFyaW8gJHtjb25maXJtYWNpb25Cb3JyYWRvLmRlZkJvdG9uLmZvclBrLmZvcm11bGFyaW99ICgke2VzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tjb25maXJtYWNpb25Cb3JyYWRvLmRlZkJvdG9uLmZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXS5wa19hZ3JlZ2FkYX06ICR7Y29uZmlybWFjaW9uQm9ycmFkby5kZWZCb3Rvbi5udW19KS4gTG9zIGRhdG9zIGRlbCBtaXNtbyB5IHRvZG9zIHN1cyByZWdpc3Ryb3MgYXNvY2lhZG9zIHNlIHBlcmRlcsOhbi4gwr9EZXNlYSBjb250aW51YXI/YH1cclxuICAgICAgICAgICAgICAgICAgICA8L0RpYWxvZ0NvbnRlbnRUZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMjBweCcsIG1hcmdpbkJvdHRvbTogJzIwcHgnIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQ29udGVudFRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhIGNvbmZpcm1hciBlbCBib3JyYWRvLCBlc2NyaWJhIGxhIGZyYXNlIDxzdHJvbmc+XCJmb3J6YXIgYm9ycmFkb1wiPC9zdHJvbmc+IGEgY29udGludWFjacOzbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpbnB1dC1mb3J6YXItYm9ycmFkb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2ZyYXNlQm9ycmFkb30gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RnJhc2VCb3JyYWRvKGUudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6ICcxMDAlJywgcGFkZGluZzogJzhweCcsIGJvcmRlcjogZXJyb3JGcmFzZUJvcnJhZG8gPyAnMXB4IHNvbGlkIHJlZCcgOiAnMXB4IHNvbGlkICNjY2MnLCBib3JkZXJSYWRpdXM6ICc0cHgnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZm9yemFyIGJvcnJhZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yRnJhc2VCb3JyYWRvICYmIDxkaXYgc3R5bGU9e3tjb2xvcjogJ3JlZCcsIG1hcmdpblRvcDogJzVweCcsIGZvbnRTaXplOiAnMC44NWVtJ319PkxhIGZyYXNlIGluZ3Jlc2FkYSBlcyBpbmNvcnJlY3RhLjwvZGl2Pn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg2XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMTBweCcsIGZvbnRXZWlnaHQ6ICdib2xkJyB9fT5EYXRvcyBxdWUgc2UgcGVyZGVyw6FuOjwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1heFdpZHRoOiAnNjAwcHgnLCBtYXJnaW46ICcwIGF1dG8nLCBmb250RmFtaWx5OiAnc2Fucy1zZXJpZicgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxSZW5kZXJpemFkb3JKU09OIGRhdG9zPXtjb25maXJtYWNpb25Cb3JyYWRvLmRhdG9zfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9EaWFsb2dDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPERpYWxvZ0FjdGlvbnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlybWFjaW9uQm9ycmFkbyhudWxsKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yRnJhc2VCb3JyYWRvKGZhbHNlKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxhclxyXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzZWNvbmRhcnlcIiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1hY2lvbkJvcnJhZG8pIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFzZUJvcnJhZG8udHJpbSgpLnRvTG93ZXJDYXNlKCkgIT09IFwiZm9yemFyIGJvcnJhZG9cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JGcmFzZUJvcnJhZG8odHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnB1dC1mb3J6YXItYm9ycmFkbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge2RlZkJvdG9uLCBmb3JQa1BhZHJlfSA9IGNvbmZpcm1hY2lvbkJvcnJhZG87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvclBrID0gZGVmQm90b24uZm9yUGs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2lvbl9ib3JyYXJfZm9ybXVsYXJpbyh7IGZvclBrLCBmb3JQa1BhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxpc3RvLCBhZ3JlZ2FyIH0gPSBnZXRCRlZhck5hbWVzKGNhc2lsbGVyby5zYWx0byk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZCb3Rvbi5udW0gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoQnlQYXNzKGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhLCB7IGZvclBrOiBmb3JQa1BhZHJlLCB2YXJpYWJsZTogYWdyZWdhciwgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBsaXN0bywgcmVzcHVlc3RhOiBudWxsIGFzIHVua25vd24gYXMgVmFsb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgZm9yUGs6IGZvclBrUGFkcmUsIHZhcmlhYmxlOiBjYXNpbGxlcm8uZXhwcmVzaW9uX2hhYmlsaXRhciBhcyBJZFZhcmlhYmxlLCByZXNwdWVzdGE6IG51bGwgYXMgdW5rbm93biBhcyBWYWxvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maXJtYWNpb25Cb3JyYWRvKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGcmFzZUJvcnJhZG8oJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvckZyYXNlQm9ycmFkbyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0+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+bGV0cmEge3Byb3BzLmRlbm9taW5hY2lvbn08L01lbnVJdGVtPlxyXG59XHJcblxyXG5mdW5jdGlvbiBCYXJyYURlTmF2ZWdhY2lvbihwcm9wczogeyBmb3JQazogRm9yUGssIHNvbG9MZWN0dXJhOiBib29sZWFuLCBtb2RvRGlyZWN0bzogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgY29uc3QgeyBvcGNpb25lcyB9ID0gdXNlU2VsZWN0b3JWaXZpZW5kYShmb3JQayk7XHJcbiAgICBjb25zdCBbY29uZmlybWFDZXJyYXIsIHNldENvbmZpcm1hQ2VycmFyXSA9IHVzZVN0YXRlPGJvb2xlYW4gfCBudWxsPihmYWxzZSk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBkb21pbmlvID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXS50ZW0uZG9taW5pbztcclxuICAgIHZhciBjZXJyYXJEaXJlY3RvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJlbW92ZUNTU0J5SWQoQk9PVFNUUkFQXzVfMV8zX1NSQyk7XHJcbiAgICAgICAgZ290b0NvbnNpc3RpcihcclxuICAgICAgICAgICAgZXN0cnVjdHVyYS5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGFyZWEudGFyZWEsXHJcbiAgICAgICAgICAgIGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1cclxuICAgICAgICApO1xyXG4gICAgICAgIC8vdmFyIGhhc2g9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5oYXNoPy5yZXBsYWNlKC9eXFwjLywnJykuc3BsaXQoJyZhdXRvcHJvY2VkJylbMF0pO1xyXG4gICAgICAgIC8vLy9oYXNoLmRlbGV0ZSgnYXV0b3Byb2NlZCcpXHJcbiAgICAgICAgLy9jbG9zZSgpO1xyXG4gICAgICAgIC8vbG9jYXRpb24uaGFzaD1oYXNoLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYm90b25lc0Zvcm11bGFyaW8gPSBbXTtcclxuICAgIGlmICghb3BjaW9uZXMubW9kb0RpcmVjdG8pIHtcclxuICAgICAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHsgcXVlOiAnaGRyJywgYWJyOiAnSGRSJywgaWQ6IElEX0JPVE9OX1ZPTFZFUl9IRFIsIGxhYmVsOiAnSG9qYSBkZSBSdXRhJywgcmV0cm9jZXNvOiAwIH0pXHJcbiAgICB9XHJcbiAgICBvcGNpb25lcy5waWxhRm9yUGsuZm9yRWFjaCgoZm9yUGssIGkpID0+XHJcbiAgICAgICAgYm90b25lc0Zvcm11bGFyaW8ucHVzaCh7IHF1ZTogJ3ZvbHZlcicsIGFicjogZm9yUGsuZm9ybXVsYXJpby5yZXBsYWNlKC9eRjovLCAnJyksIGxhYmVsOiBmb3JQay5mb3JtdWxhcmlvLCByZXRyb2Nlc286IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggLSBpIH0pXHJcbiAgICApXHJcbiAgICBib3RvbmVzRm9ybXVsYXJpby5wdXNoKHsgcXVlOiAnJywgYWJyOiBmb3JQay5mb3JtdWxhcmlvLnJlcGxhY2UoL15GOi8sICcnKSwgbGFiZWw6IGZvclBrLmZvcm11bGFyaW8sIHJldHJvY2VzbzogMCB9KTtcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZDogcHJvcHMubW9kb0RpcmVjdG8gPyBJRF9CT1RPTl9DRVJSQVIgOiBJRF9CT1RPTl9WT0xWRVJfSERSLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgZnVuOiAoXHJcbiAgICAgICAgICAgIHI6IFJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgIF9mZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LFxyXG4gICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgIGZlZWRiYWNrQWxsOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgICAgICAgICBfZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50by5zZXRBdHRyaWJ1dGUoJ3Jlc3VtZW4tZXN0YWRvJywgY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoZm9yUGssIGZlZWRiYWNrQWxsLCByKS5yZXN1bWVuRXN0YWRvKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgY29uc3QgY2FtYmlhciA9IChtb2RvRGVzcGxpZWd1ZTogTW9kb0Rlc3BsaWVndWUpID0+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+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEZvcm11bGFyaW9EZXNwbGllZ3VlKHByb3BzOiB7IGZvclBrOiBGb3JQayB9KSB7XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICBjb25zdCBmb3JQayA9IHByb3BzLmZvclBrO1xyXG4gICAgdmFyIHsgZm9ybXVsYXJpbywgbW9kb0Rlc3BsaWVndWUsIG9wY2lvbmVzIH1cclxuICAgICAgICA9IHVzZVNlbGVjdG9yVml2aWVuZGEoZm9yUGspO1xyXG4gICAgdmFyIHNvbG9MZWN0dXJhID0gZ2V0RGF0b3NCeVBhc3MoKS5zb2xvTGVjdHVyYTtcclxuICAgIHZhciBlc1ZvbHZlciA9IG9wY2lvbmVzLnBpbGFGb3JQay5sZW5ndGggPiAwO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB2YXIgY29udHJvbFNjcm9sbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgdmFyIGFycmliYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpO1xyXG4gICAgICAgICAgICBpZiAoYXJyaWJhKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFycmliYS5zdHlsZSwgJ3Zpc2liaWxpdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBhcnJpYmEuZWxUb3BWaXNpYmlsaXphciAhPSBudWxsICYmIGFycmliYS5lbFRvcFZpc2liaWxpemFyICsgMTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGFiYWpvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKTtcclxuICAgICAgICAgICAgaWYgKGFiYWpvKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGFiYWpvLnN0eWxlLCAndmlzaWJpbGl0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGFiYWpvLmVsQm90dG9tVmlzaWJpbGl6YXIgIT0gbnVsbCAmJiBhYmFqby5lbEJvdHRvbVZpc2liaWxpemFyIC0gMjBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgd2luZG93LmlubmVySGVpZ2h0ICogMC43ID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRDYXNvID0gbGlrZUFyKGZvclBrKS5maW5kKChfLCBrKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrICE9ICdmb3JtdWxhcmlvJ1xyXG4gICAgICAgIH0pPy50b1N0cmluZygpO1xyXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IGdldEVzdHJ1Y3R1cmEoKS5vcGVyYXRpdm8gKyAnLSAnICsgaWRDYXNvO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICBjb250cm9sU2Nyb2xsKCk7XHJcbiAgICAgICAgY2FsY3VsYXJDb21vZGluZXMoZm9yUGspO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjb250cm9sU2Nyb2xsKTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gVE9ETyBWb2x2ZXIgYSBwb25lciBlbCBtb3ZpbWllbnRvIGEgbGEgYWN0dWFsXHJcbiAgICB2YXIgYWN0dWFsOiBhbnlcclxuICAgIHZhciBjb21wbGV0bzogYW55XHJcbiAgICB2YXIgb25DbGlja1NhbHRhckFjdHVhbCA9ICgpID0+IHtcclxuICAgICAgICB2YXIgeyB2YXJpYWJsZUFjdHVhbCB9ID0gZGlzcGF0Y2hCeVBhc3MoYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEsIHsgcmVzcHVlc3RhOiBudWxsLCB2YXJpYWJsZTogTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsIGZvclBrOiBwcm9wcy5mb3JQayB9KTtcclxuICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwpIHtcclxuICAgICAgICAgICAgZW5mb2NhckVsZW1lbnRvRGVWYXJpYWJsZSh2YXJpYWJsZUFjdHVhbClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgbGlzdGFNb2RvczogTW9kb0Rlc3BsaWVndWVbXSA9IFsnbWV0YWRhdG9zJywgJ3JlbGV2YW1pZW50bycsICdQREYnXTtcclxuICAgIFsnYm90b24tdm9sdmVyLTEnLCAnYm90b24tdm9sdmVyLTInXS5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICByZWdpc3RyYXJFbGVtZW50byh7XHJcbiAgICAgICAgICAgIGlkLCBkaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICAgICAgcjogUmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50bzogSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgICAgIF9lc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbiAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIGVzVm9sdmVyID8gZmVlZGJhY2tGb3JtLnJlc3VtZW4gOiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShmb3JQaywgZmVlZGJhY2tBbGwsIHIpLnJlc3VtZW5Fc3RhZG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzcGVjaWFsIGhheSBxdWUgbGVlcmxvIGVuIGVsIHBhcnNlciBkZSBjYXNpbGxlcm9zIHNpIGVzdG8gdGVybWluYSBxdWVkYW5kbyBhc8OtXHJcbiAgICB2YXIgcGFudGFsbGFDb21wbGV0YSA9IGZvcm11bGFyaW8uZXNwZWNpYWw/LnBhbnRhbGxhQ29tcGxldGE7XHJcbiAgICBjb25zdCBtb2RvRE06IE1vZG9ETSA9IGdldEZvcm1SZW5kZXJlcigpLmdldE1vZG9ETSgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgICA8QXBwQmFyUHJpbmNpcGFsXHJcbiAgICAgICAgICAgICAgICBtb2RvRE09e21vZG9ETX1cclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhPXtzb2xvTGVjdHVyYX1cclxuICAgICAgICAgICAgICAgIGJhcnJhTmF2Rm9ybXVsYXJpbz17XHJcbiAgICAgICAgICAgICAgICAgICAgPEJhcnJhRGVOYXZlZ2FjaW9uIGZvclBrPXtmb3JQa30gc29sb0xlY3R1cmE9e3NvbG9MZWN0dXJhIHx8IGZhbHNlfSBtb2RvRGlyZWN0bz17b3BjaW9uZXMubW9kb0RpcmVjdG99IC8+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJtaW5pLWNvbnNvbGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9BcHBCYXJQcmluY2lwYWw+XHJcbiAgICAgICAgICAgIDxtYWluPlxyXG4gICAgICAgICAgICAgICAgPFBhcGVyIGNsYXNzTmFtZT1cImZvcm11bGFyaW9cIiBtb2RvLWRlc3BsaWVndWU9e21vZG9EZXNwbGllZ3VlfSB2ZXItbnVtLW9wY2lvbmVzPXtvcGNpb25lcy5jb25DYW1wb09wY2lvbmVzID8gJ1NJJyA6ICdOTyd9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtwYW50YWxsYUNvbXBsZXRhID8gbnVsbCA6IDxCb3RvblZvbHZlckVuRGl2IGlkPVwiYm90b24tdm9sdmVyLTFcIiAvPn1cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Rm9ybXVsYXJpb0VuY2FiZXphZG8gY2FzaWxsZXJvPXtmb3JtdWxhcmlvfSAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ29udGVuaWRvSW50ZXJub0Jsb3F1ZU9Gb3JtdWxhcmlvIGJsb3F1ZU9Gb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JtdWxhcmlvPXtmb3JtdWxhcmlvfSBmb3JQaz17Zm9yUGt9IG11bHRpcGxlPXtmYWxzZX0gLz5cclxuICAgICAgICAgICAgICAgICAgICB7cGFudGFsbGFDb21wbGV0YSA/IG51bGwgOiA8Qm90b25Wb2x2ZXJFbkRpdiBpZD1cImJvdG9uLXZvbHZlci0yXCIgLz59XHJcbiAgICAgICAgICAgICAgICA8L1BhcGVyPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hcnJpYmEnIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJhZGRcIiBvbkNsaWNrPXtvbkNsaWNrU2FsdGFyQWN0dWFsfT5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5LZXlib2FyZEFycm93VXAgLz5cclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWFjdGl2by1hYmFqbycgY29sb3I9XCJwcmltYXJ5XCIgYXJpYS1sYWJlbD1cImFkZFwiIG9uQ2xpY2s9e29uQ2xpY2tTYWx0YXJBY3R1YWx9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJQ09OLktleWJvYXJkQXJyb3dEb3duIC8+XHJcbiAgICAgICAgICAgICAgICA8L0ZhYj5cclxuICAgICAgICAgICAgICAgIDxGYWIgaWQ9J2ZhYi1lcnJvci1hcnJpYmEnIHZhcmlhbnQ9XCJleHRlbmRlZFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cImVkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8SUNPTi5OYXZpZ2F0aW9uIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRXJyb3JcclxuICAgICAgICAgICAgICAgIDwvRmFiPlxyXG4gICAgICAgICAgICAgICAgPEZhYiBpZD0nZmFiLWVycm9yLWFiYWpvJyB2YXJpYW50PVwiZXh0ZW5kZWRcIiBjb2xvcj1cInNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJlZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPElDT04uTmF2aWdhdGlvbkRvd24gLz5cclxuICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgPC9GYWI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nZXNwYWNpby1maW5hbC1mb3JtdWxhcmlvJz48L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhICYmIG9wY2lvbmVzLmZvclBrID8gPERlc3BsZWdhckNvbmZpcm1hckJvcnJhclJlc3B1ZXN0YSBmb3JQaz17b3BjaW9uZXMuZm9yUGt9IHZhcmlhYmxlQm9ycmFyPXtvcGNpb25lcy5tb2RvQm9ycmFyUmVzcHVlc3RhfSAvPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvbWFpbj5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBdHJpYnV0byhwcm9wczogeyBub21icmU6IHN0cmluZywgdmFsb3I6IGFueSB9KSB7XHJcbiAgICByZXR1cm4gcHJvcHMudmFsb3IgIT0gbnVsbCAmJiBwcm9wcy52YWxvciAhPSAnJyA/IDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXBhclwiPlxyXG4gICAgICAgIHtwcm9wcy5ub21icmUgPyA8c3BhbiBjbGFzc05hbWU9XCJhdHJpYnV0by1ub21icmVcIj57cHJvcHMubm9tYnJlfTwvc3Bhbj4gOiBudWxsfVxyXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImF0cmlidXRvLXZhbG9yXCI+e3Byb3BzLnZhbG9yLnRvU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgPC9zcGFuPiA6IG51bGxcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGxpc3RhRXN0YWRvc0NhcmdhOiBFc3RhZG9DYXJnYVtdID0gWydyZXN1bWVuJywgJ3JlbGV2YW1pZW50bycsICdyZWNpYm8nXTtcclxuZXhwb3J0IHZhciByZXN1bWlkb3JlcyA9IFtcclxuICAgIHsgbm9tYnJlOiAnUkVBJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcIm9rXCIgfSxcclxuICAgIHsgbm9tYnJlOiAnQ2l0YSBwYWN0YWRhJywgZjogKHJyOiBSZXNwdWVzdGFzUmFpeikgPT4gcnIucmVzdW1lbkVzdGFkbyA9PSBcImNpdGEgcGFjdGFkYVwiIH0sXHJcbiAgICB7IG5vbWJyZTogJ1BlbmRpZW50ZXMnLCBmOiAocnI6IFJlc3B1ZXN0YXNSYWl6KSA9PiByci5yZXN1bWVuRXN0YWRvID09IFwidmFjaW9cIiB9LFxyXG5dO1xyXG5cclxucmVzdW1pZG9yZXMucHVzaChcclxuICAgIHsgbm9tYnJlOiAnT3Ryb3MnLCBmOiByZXN1bWlkb3Jlcy5yZWR1Y2UoKGcsIHIpID0+IChyciA9PiAhci5mKHJyKSAmJiBnKHJyKSksIChfOiBSZXNwdWVzdGFzUmFpeikgPT4gdHJ1ZSkgfVxyXG4pXHJcblxyXG5leHBvcnQgdHlwZSBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGUgPSAocHJvcHM6IHtcclxuICAgIG51bVZpdmllbmRhOiBJZEVuYyxcclxuICAgIGZvcm1QcmluY2lwYWw6IElkRm9ybXVsYXJpbyxcclxuICAgIHRhcmVhOiBzdHJpbmcsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzUmFpeixcclxufSkgPT4gSlNYLkVsZW1lbnQ7XHJcblxyXG5leHBvcnQgdmFyIERlc3BsZWdhckxpbmVhUmVzdW1lblVBUHJpbmNpcGFsOiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbFR5cGVcclxuXHJcbmV4cG9ydCBjb25zdCBzZXREZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCA9IChsaW5lYVJlc3VtZW5VQVByaW5jaXBhbDogRGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxUeXBlKSA9PiBEZXNwbGVnYXJMaW5lYVJlc3VtZW5VQVByaW5jaXBhbCA9IGxpbmVhUmVzdW1lblVBUHJpbmNpcGFsO1xyXG5cclxuc2V0RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWwoKHByb3BzOiB7XHJcbiAgICBudW1WaXZpZW5kYTogSWRFbmMsXHJcbiAgICBmb3JtUHJpbmNpcGFsOiBJZEZvcm11bGFyaW8sXHJcbiAgICB0YXJlYTogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3Rhc1JhaXosXHJcbn0pID0+IHtcclxuICAgIGNvbnN0IHsgbnVtVml2aWVuZGEsIHJlc3B1ZXN0YXMsIGZvcm1QcmluY2lwYWwsIHRhcmVhIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGlkID0gJ3Zpdi0nICsgbnVtVml2aWVuZGE7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgY29uc3QgZm9yUGs6IEZvclBrID0geyBmb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLCBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogTnVtYmVyKG51bVZpdmllbmRhKSBhcyBJZEVuYyB9IGFzIEZvclBrOyAvL25vIHF1aXRhciBlbCBjYXN0ZW8gcG9ycXVlIHZpZW5lIGNvbW8gdGV4dG8geSBuZWNlc2l0byBxdWUgc2VhIG7Dum1lcm9cclxuICAgIHZhciB0ZW0gPSBnZXREYXRvc0J5UGFzcygpLmluZm9ybWFjaW9uSGRyW251bVZpdmllbmRhXS50ZW07XHJcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIGludGVudGFyQmFja3VwKGZvclBrKVxyXG4gICAgfSlcclxuICAgIHJlZ2lzdHJhckVsZW1lbnRvKHtcclxuICAgICAgICBpZCwgZGlyZWN0OiB0cnVlLFxyXG4gICAgICAgIGZ1bjogKFxyXG4gICAgICAgICAgICByOiBSZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICBfZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPixcclxuICAgICAgICAgICAgZWxlbWVudG86IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgICAgICBmZWVkYmFja0FsbDogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgICAgICAgICAgX2VzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgLy9wcmVndW50byBzaSBlcyBsYSBtaXNtYSB2aXZpZW5kYSBwb3JxdWUgbGEgZnVuY2lvbiBzZSBkaXNwYXJhIFxyXG4gICAgICAgICAgICAvL2NvbiB0b2RhcyBsYXMgY29tYmluYWNpb25lcyBkZSByZXNwdWVzdGFzIHBhcmEgY2FkYSBmb3JQa1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgdml2aWVuZGEgZXhpc3RlXHJcbiAgICAgICAgICAgIGlmIChyW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gPT0gZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG8uc2V0QXR0cmlidXRlKCdyZXN1bWVuLWVzdGFkbycsIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKGZvclBrLCBmZWVkYmFja0FsbCwgcikucmVzdW1lbkVzdGFkbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfSlcclxuICAgIHJldHVybiA8VGFibGVSb3cga2V5PXtudW1WaXZpZW5kYX0+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RlbSA/XHJcbiAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgIDxEZXNwbGVnYXJUZW0gdGVtPXt0ZW19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jlc3B1ZXN0YXNbJ3Jlc3VtZW5Fc3RhZG8nIGFzIElkVmFyaWFibGVdID09IFwiY2l0YSBwYWN0YWRhXCIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGEgcmVzcHVlc3Rhcz17cmVzcHVlc3Rhc30gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyQ2l0YVBhY3RhZGFZU2VsZWNjaW9uYWRvQW50ZXJpb3JUZW0gdGVtPXt0ZW19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICA6IG51bGx9XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgPFRhYmxlQ2VsbD5cclxuICAgICAgICAgICAge3RhcmVhfVxyXG4gICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgIDxUYWJsZUNlbGw+XHJcbiAgICAgICAgICAgIDxCdXR0b24gaWQ9e2lkfSBvbkNsaWNrPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9GT1JNVUxBUklPKHsgZm9yUGssIGFwaWxhclZ1ZWx0YTogZmFsc2UgfSkpXHJcbiAgICAgICAgICAgIH0+XHJcbiAgICAgICAgICAgICAgICB7bnVtVml2aWVuZGEudG9TdHJpbmcoKX1cclxuICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICA8L1RhYmxlUm93PlxyXG59KTtcclxuXHJcbmV4cG9ydCB0eXBlIERlc3BsZWdhckNhcmdhVHlwZSA9IChwcm9wczoge1xyXG4gICAgY2FyZ2E6IENhcmdhLFxyXG4gICAgaWRDYXJnYTogSWRDYXJnYSxcclxuICAgIHBvc2ljaW9uOiBudW1iZXIsXHJcbiAgICBpbmZvcm1hY2lvbkhkcjogSW5mb3JtYWNpb25IZHIsXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFMYXNVQSxcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+XHJcbiAgICB9XHJcbn0pID0+IEpTWC5FbGVtZW50O1xyXG5cclxuZXhwb3J0IHZhciBEZXNwbGVnYXJDYXJnYTogRGVzcGxlZ2FyQ2FyZ2FUeXBlXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0RGVzcGxlZ2FyQ2FyZ2EgPSAoZGVzcGxpZWd1ZUNhcmdhOiBEZXNwbGVnYXJDYXJnYVR5cGUpID0+IERlc3BsZWdhckNhcmdhID0gZGVzcGxpZWd1ZUNhcmdhO1xyXG5cclxuc2V0RGVzcGxlZ2FyQ2FyZ2EoKHByb3BzOiB7XHJcbiAgICBjYXJnYTogQ2FyZ2EsXHJcbiAgICBpZENhcmdhOiBJZENhcmdhLFxyXG4gICAgcG9zaWNpb246IG51bWJlcixcclxuICAgIGluZm9ybWFjaW9uSGRyOiBJbmZvcm1hY2lvbkhkcixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YUxhc1VBLFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHtcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj5cclxuICAgIH1cclxufSkgPT4ge1xyXG4gICAgY29uc3QgeyBjYXJnYSwgaWRDYXJnYSwgaW5mb3JtYWNpb25IZHIsIHJlc3B1ZXN0YXMgfSA9IHByb3BzO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBsZXQgY2FudExpbmVhc1Jlc3VtZW4gPSBsaWtlQXIoaW5mb3JtYWNpb25IZHIpLmZpbHRlcigoaW5mb3JtYWNpb24pID0+IGluZm9ybWFjaW9uLnRlbS5jYXJnYSA9PSBpZENhcmdhKS5hcnJheSgpLmxlbmd0aDtcclxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcclxuICAgIGNvbnN0IG1vZG9ETTogTW9kb0RNID0gZ2V0Rm9ybVJlbmRlcmVyKCkuZ2V0TW9kb0RNKCk7XHJcbiAgICByZXR1cm4gPFBhcGVyIGNsYXNzTmFtZT1cImNhcmdhXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMTBweCcsIHBhZGRpbmc6ICcxMHB4JyB9fT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZm9ybWFjaW9uLWNhcmdhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZ2FcIj7DgXJlYToge2lkQ2FyZ2F9PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib2JzZXJ2YWNpb25lc1wiPntjYXJnYS5vYnNlcnZhY2lvbmVzfTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5mb3JtYWNpb24tY2FyZ2FcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmZWNoYVwiPntjYXJnYS5mZWNoYX08L2Rpdj5cclxuICAgICAgICAgICAgey8qXHJcbiAgICAgICAgICAgIDxCdXR0b25Hcm91cD5cclxuICAgICAgICAgICAge2xpc3RhRXN0YWRvc0NhcmdhLm1hcChlc3RhZG9fY2FyZ2E9PlxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBrZXk9e2VzdGFkb19jYXJnYX0gdmFyaWFudD17ZXN0YWRvX2NhcmdhPT1jYXJnYS5lc3RhZG9fY2FyZ2E/XCJjb250YWluZWRcIjpcIm91dGxpbmVkXCJ9IG9uQ2xpY2s9e1xyXG4gICAgICAgICAgICAgICAgICAgICgpPT5kaXNwYXRjaChkaXNwYXRjaGVycy5FU1RBRE9fQ0FSR0Eoe2lkQ2FyZ2EsIGVzdGFkb19jYXJnYX0pKVxyXG4gICAgICAgICAgICAgICAgfT57ZXN0YWRvX2NhcmdhfTwvQnV0dG9uPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxyXG4gICAgICAgICAgICAqL31cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB7Y2FyZ2EuZXN0YWRvX2NhcmdhID09IG51bGwgJiYgIXByb3BzLnBvc2ljaW9uIHx8IGNhcmdhLmVzdGFkb19jYXJnYSA9PSAncmVsZXZhbWllbnRvJyA/XHJcbiAgICAgICAgICAgIDxUYWJsZSBjbGFzc05hbWU9XCJ0YWJsYS1jYXJnYS1ob2phLWRlLXJ1dGFcIj5cclxuICAgICAgICAgICAgICAgIDxjb2xncm91cD5cclxuICAgICAgICAgICAgICAgICAgICA8Y29sIHN0eWxlPXt7IHdpZHRoOiBcIjc1JVwiIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvbCBzdHlsZT17eyB3aWR0aDogXCIxMCVcIiB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb2wgc3R5bGU9e3sgd2lkdGg6IFwiMTUlXCIgfX0gLz5cclxuICAgICAgICAgICAgICAgIDwvY29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICB7Y2FudExpbmVhc1Jlc3VtZW4gP1xyXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQgc3R5bGU9e3sgZm9udFNpemU6IFwiMS4ycmVtXCIgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbD5kb21pY2lsaW88L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+dGFyZWE8L1RhYmxlQ2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGw+ZW5jPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgPFRhYmxlQm9keT5cclxuICAgICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7bGlrZUFyKGluZm9ybWFjaW9uSGRyKS5maWx0ZXIoKGluZm9ybWFjaW9uKSA9PiBpbmZvcm1hY2lvbi50ZW0uY2FyZ2EgPT0gaWRDYXJnYSkubWFwKChpbmZvcm1hY2lvbiwgbnVtVml2aWVuZGEpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RGVzcGxlZ2FyTGluZWFSZXN1bWVuVUFQcmluY2lwYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e251bVZpdmllbmRhfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZpdmllbmRhPXtudW1WaXZpZW5kYX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYT17aW5mb3JtYWNpb24udGFyZWEudGFyZWF9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVByaW5jaXBhbD17aW5mb3JtYWNpb24udGFyZWEubWFpbl9mb3JtfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM9e3Jlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW251bVZpdmllbmRhXSBhcyBSZXNwdWVzdGFzUmFpen1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuYXJyYXkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NhcmdhLnB1ZWRlX2F1dG9nZW5lcmFyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJ0ci1jYXJnYS1udWV2b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwgY29sU3Bhbj17M30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e21vZG9ETSA9PSBcImNhcGFcIiA/IFwic3VjY2Vzc1wiIDogXCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWFyRW5jdWVzdGEoaWRDYXJnYSwgKGZvclBrUmFpejogRm9yUGtSYWl6KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGRpc3BhdGNoZXJzLkNBTUJJQVJfRk9STVVMQVJJTyh7IGZvclBrOiBmb3JQa1JhaXosIGFwaWxhclZ1ZWx0YTogZmFsc2UgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJQ09OLkFkZCAvPiBOdWV2byBjdWVzdGlvbmFyaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgPC9UYWJsZUJvZHk+XHJcbiAgICAgICAgICAgIDwvVGFibGU+IDpcclxuICAgICAgICAgICAgPFRhYmxlPlxyXG4gICAgICAgICAgICAgICAgPFRhYmxlSGVhZCBzdHlsZT17eyBmb250U2l6ZTogXCIxLjJyZW1cIiB9fT5cclxuICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgY2xhc3NOYW1lPVwidHItY2FyZ2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VtaWRvcmVzLm1hcCgocmVzdW1pZG9yOiB0eXBlb2YgcmVzdW1pZG9yZXNbMF0sIGk6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVzdW1pZG9yLm5vbWJyZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XHJcbiAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZD5cclxuICAgICAgICAgICAgPC9UYWJsZT5cclxuICAgICAgICB9XHJcbiAgICA8L1BhcGVyPlxyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBEZXNwbGVnYXJDaXRhUGFjdGFkYShwcm9wczogeyByZXNwdWVzdGFzOiBSZXNwdWVzdGFzIH0pIHtcclxuICAgIGNvbnN0IHsgcmVzcHVlc3RhcyB9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjaXRhLXBhY3RhZGFcIj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJDaXRhIHBhY3RhZGEgY29uIFwiIHZhbG9yPXtyZXNwdWVzdGFzW3AxMl19IC8+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48QXRyaWJ1dG8gbm9tYnJlPVwiQ2VsLjpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDJdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIlRlbC46XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3AzXX0gLz48L2Rpdj5cclxuICAgICAgICA8ZGl2PjxBdHJpYnV0byBub21icmU9XCJGZWNoYTpcIiB2YWxvcj17cmVzcHVlc3Rhc1tzcDRdfSAvPjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PEF0cmlidXRvIG5vbWJyZT1cIkhvcmE6XCIgdmFsb3I9e3Jlc3B1ZXN0YXNbc3A1XX0gLz48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRGVzcGxlZ2FyQ2l0YVBhY3RhZGFZU2VsZWNjaW9uYWRvQW50ZXJpb3JUZW0ocHJvcHM6IHsgdGVtOiBURU0gfSkge1xyXG4gICAgY29uc3QgeyB0ZW0gfSA9IHByb3BzO1xyXG4gICAgcmV0dXJuIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZW0tY2l0YVwiPlxyXG4gICAgICAgICAgICA8QXRyaWJ1dG8gbm9tYnJlPVwiQ2l0YTpcIiB2YWxvcj17dGVtLmNpdGF9IC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERlc3BsZWdhclRlbShwcm9wczogeyB0ZW06IFRFTSB9KSB7XHJcbiAgICBjb25zdCB7IHRlbSB9ID0gcHJvcHM7XHJcbiAgICByZXR1cm4gPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRlbS1kb21pY2lsaW9cIj57dGVtLm5vbWNhbGxlfSB7dGVtLm5yb2NhdGFzdHJhbH0gPEF0cmlidXRvIG5vbWJyZT1cInBpc29cIiB2YWxvcj17dGVtLnBpc299IC8+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+XHJcbiAgICAgICAgICAgIDxBcHBEbUVuY3UgLz5cclxuICAgICAgICA8L1JlbmRlclByaW5jaXBhbD4sXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JylcclxuICAgIClcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZEluc3RhbmNlKCkge1xyXG4gICAgaWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBiYyA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdjb250YWRvcicpO1xyXG4gICAgdmFyIG15SWQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCgxMDAgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKSkgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLy8rJy0nK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgYWxsT3BlbmVkVGFic1tteUlkXSA9IDE7XHJcbiAgICBpbmZvT3BlbmVkVGFicy5teUlkID0gbXlJZDtcclxuICAgIHZhciBldmVudCA9IG5ldyBFdmVudCgnbXktdGFicycpO1xyXG4gICAgYmMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2KSB7XHJcbiAgICAgICAgaWYgKGV2LmRhdGEucXVlID09ICdzb3knKSB7XHJcbiAgICAgICAgICAgIGlmICghYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSkge1xyXG4gICAgICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXYuZGF0YS5xdWUgPT0gJ3VubG9hZCcpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFsbE9wZW5lZFRhYnNbZXYuZGF0YS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldi5kYXRhLnF1ZSA9PSAnbG9hZCcpIHtcclxuICAgICAgICAgICAgYWxsT3BlbmVkVGFic1tldi5kYXRhLmlkXSA9IDE7XHJcbiAgICAgICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAnc295JywgaWQ6IG15SWQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluZm9PcGVuZWRUYWJzLm90aGVyVGFic05hbWVzID0gbGlrZUFyKGFsbE9wZW5lZFRhYnMpLmZpbHRlcigoXywgaWQpID0+IGlkICE9IG15SWQpLmpvaW4oJywnKTtcclxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9O1xyXG4gICAgYmMucG9zdE1lc3NhZ2UoeyBxdWU6ICdsb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGJjLnBvc3RNZXNzYWdlKHsgcXVlOiAndW5sb2FkJywgaWQ6IG15SWQgfSk7XHJcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfSlcclxuICAgIC8vbW9zdHJhclF1aWVuZXNTb21vcygpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TGlicmVEZXNwbGllZ3VlID0gKGxpYnJlOiBMaWJyZURlc3BsaWVndWVUeXBlKSA9PiBMaWJyZURlc3BsaWVndWUgPSBsaWJyZVxyXG5cclxuc2V0TGlicmVEZXNwbGllZ3VlKChwcm9wczoge1xyXG4gICAga2V5OiBzdHJpbmdcclxuICAgIGNhc2lsbGVybzogTGlicmVcclxuICAgIGZvcm11bGFyaW86IEZvcm11bGFyaW9cclxuICAgIGZvclBrOiBGb3JQa1xyXG59KSA9PiA8ZGl2IGtleT17cHJvcHMua2V5fSBpZD17cHJvcHMuY2FzaWxsZXJvLmlkX2Nhc2lsbGVyb30+ZXN0ZSBjYXNpbGxlcm8gZGViZSByZWRlZmluaXJzZSBlbiBsYSBBUFAgZmluYWwgeSBzdSB1c28gZXMgZXhjbHVzaXZvIGRlbCDDoXJlYSBpbmZvcm3DoXRpY2E8L2Rpdj4pXHJcblxyXG5zZXRDYWxjdWxhclZhcmlhYmxlcygocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHtcclxuICAgIHR5cGUgQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpc1xyXG4gICAgICAgIHZhclNleG9QZXJzb25hOiBJZFZhcmlhYmxlXHJcbiAgICAgICAgdmFyTm9tYnJlUGVyc29uYTogSWRWYXJpYWJsZVxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IElkVmFyaWFibGVcclxuICAgIH1cclxuICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgdmFyIGF1dG9DYXJnYXJQZXJzb25hcyA9IChjb25maWdQYWRyZTogQ29uZmlnUGFkcmUsIHVhUGFkcmVQZXJzb25hczogSWRVbmlkYWRBbmFsaXNpcywgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSkgPT4ge1xyXG4gICAgICAgIHZhciBsZWVyTm9tYnJlcyA9IChyZXNwdWVzdGFzVUFQYWRyZTogUmVzcHVlc3RhcywgY29uZmlnUGFkcmU6IENvbmZpZ1BhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gfHwgZW1wdHkocmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHx8IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdWzBdW2NvbmZpZ1BhZHJlLnZhclNleG9QZXJzb25hXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9zTm9tYnJlcyA9IHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnZhckxvc05vbWJyZXNdIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvc05vbWJyZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9zTm9tYnJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChub21icmU6IHN0cmluZykgPT4gbm9tYnJlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgobm9tYnJlOiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUGFkcmVbY29uZmlnUGFkcmUudWFQZXJzb25hc11baV0gPSByZXNwdWVzdGFzVUFQYWRyZVtjb25maWdQYWRyZS51YVBlcnNvbmFzXVtpXSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVBhZHJlW2NvbmZpZ1BhZHJlLnVhUGVyc29uYXNdW2ldW2NvbmZpZ1BhZHJlLnZhck5vbWJyZVBlcnNvbmFdID0gbm9tYnJlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1YVBhZHJlUGVyc29uYXNdKSB7XHJcbiAgICAgICAgICAgIGlmICh1YVBhZHJlUGVyc29uYXMgPT0gJ3ZpdmllbmRhcycpIHtcclxuICAgICAgICAgICAgICAgIGxlZXJOb21icmVzKHJlc3B1ZXN0YXNSYWl6LCBjb25maWdQYWRyZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3B1ZXN0YXNVQVBhZHJlIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNSYWl6W3VhUGFkcmVQZXJzb25hc10gPz8gW10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVlck5vbWJyZXMocmVzcHVlc3Rhc1VBUGFkcmUsIGNvbmZpZ1BhZHJlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHVhc0l0ZXJhcjogUGFydGlhbDx7XHJcbiAgICAgICAgW2tleSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogQ29uZmlnUGFkcmVcclxuICAgIH0+O1xyXG4gICAgdmFyIGNvbmZpZ0VuY3U6IENvbmZpZ1BhZHJlID0ge1xyXG4gICAgICAgIHVhUGVyc29uYXM6ICdwZXJzb25hcycsXHJcbiAgICAgICAgdmFyU2V4b1BlcnNvbmE6ICdzZXhvJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmUnIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgdmFyTG9zTm9tYnJlczogXCJsb3Nfbm9tYnJlc1wiIGFzIElkVmFyaWFibGVcclxuICAgIH07XHJcbiAgICB2YXIgY29uZmlnU3VwZTogQ29uZmlnUGFkcmUgPSB7XHJcbiAgICAgICAgdWFQZXJzb25hczogJ3BlcnNvbmFzX3N1cCcgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgICAgICB2YXJTZXhvUGVyc29uYTogJ3NleG9fc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhck5vbWJyZVBlcnNvbmE6ICdub21icmVfc3VwJyBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIHZhckxvc05vbWJyZXM6IFwibm9tYnJlc19jb21wb25lbnRlc19zdXBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgdWFzSXRlcmFyID0ge1xyXG4gICAgICAgICAgICBob2dhcmVzOiBjb25maWdFbmN1LFxyXG4gICAgICAgICAgICBbXCJob2dhcmVzX3N1cFwiIGFzIElkVW5pZGFkQW5hbGlzaXNdOiBjb25maWdTdXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpa2VBcih1YXNJdGVyYXIpLmZvckVhY2goKGNvbmZpZ1BhZHJlLCB1YVBhZHJlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdQYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgYXV0b0NhcmdhclBlcnNvbmFzKGNvbmZpZ1BhZHJlLCB1YVBhZHJlIGFzIElkVW5pZGFkQW5hbGlzaXMsIGVzdHJ1Y3R1cmEpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY29uZmlnUGFkcmVzOiBDb25maWdQYWRyZVtdID0gW2NvbmZpZ0VuY3UsIGNvbmZpZ1N1cGVdO1xyXG4gICAgICAgIGNvbmZpZ1BhZHJlcy5mb3JFYWNoKChjb25maWdQYWRyZSkgPT4ge1xyXG4gICAgICAgICAgICBhdXRvQ2FyZ2FyUGVyc29uYXMoY29uZmlnUGFkcmUsICd2aXZpZW5kYXMnLCBlc3RydWN0dXJhKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXNwdWVzdGFzUmFpei52ZG9taW5pbyA9IGdldERhdG9zQnlQYXNzKCkuaW5mb3JtYWNpb25IZHJbZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0udGVtLmRvbWluaW87XHJcbiAgICAvL1RPRE86IE1FSk9SQVIgRU4gQUxHVU4gTU9NRU5UTyBFTCBCT1RPTiBMSVNUT1xyXG4gICAgLy9sZXQgdG90YWxIID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2gnIGFzIElkVmFyaWFibGVdO1xyXG4gICAgLy9yZXNwdWVzdGFzUmFpelsnJEIuRjpTMScgYXMgSWRWYXJpYWJsZV0gPSAocmVzcHVlc3Rhc1JhaXpbJ2hvZ2FyZXMnXSB8fCBbXSkubGVuZ3RoID09IHRvdGFsSCA/ICdvaycgOiBudWxsO1xyXG4gICAgLy9sZXQgdG90YWxIc3VwID0gcmVzcHVlc3Rhc1JhaXpbJ3RvdGFsX2hfc3VwJyBhcyBJZFZhcmlhYmxlXTtcclxuICAgIC8vcmVzcHVlc3Rhc1JhaXpbJyRCLkY6UzFfU1VQJyBhcyBJZFZhcmlhYmxlXSA9IChyZXNwdWVzdGFzUmFpelsnaG9nYXJlc19zdXAnIGFzIElkVW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5sZW5ndGggPT0gdG90YWxIc3VwID8gJ29rJyA6IG51bGw7XHJcbn0pXHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIGxvYWRJbnN0YW5jZSgpXHJcbn0pXHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhckNvbW9kaW5lcyhmb3JQazogRm9yUGspIHtcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBjb25zdCBpbmZvSGRyID0gZ2V0RGF0b3NCeVBhc3MoKS5pbmZvcm1hY2lvbkhkcltmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXTtcclxuICAgIGNvbnN0IHNlbWFuYU51bWVybyA9IGluZm9IZHI/LnRlbT8uc2VtYW5hO1xyXG4gICAgY29uc3Qgc2VtYW5hT2JqID0gc2VtYW5hTnVtZXJvICE9IG51bGwgPyBlc3RydWN0dXJhLnNlbWFuYXM/LltzZW1hbmFOdW1lcm8gYXMgSWRTZW1hbmFdIDogbnVsbDtcclxuICAgIGNvbnN0IHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICBjb25zdCByYW5nb0ZlY2hhID0gKGRlc2RlPzogc3RyaW5nIHwgbnVsbCwgaGFzdGE/OiBzdHJpbmcgfCBudWxsKSA9PlxyXG4gICAgICAgIChkZXNkZSAmJiBoYXN0YSkgPyBgJHtmZWNoYVJlZmVyZW5jaWEoZGVzZGUpfSBhICR7ZmVjaGFSZWZlcmVuY2lhKGhhc3RhKX1gIDogbnVsbDtcclxuICAgIGNvbnN0IHNlbVJlZiA9IHJhbmdvRmVjaGEoc2VtYW5hT2JqPy5zZW1hbmFfcmVmZXJlbmNpYV9kZXNkZSwgc2VtYW5hT2JqPy5zZW1hbmFfcmVmZXJlbmNpYV9oYXN0YSk7XHJcbiAgICBjb25zdCBkMzBSZWYgPSByYW5nb0ZlY2hhKHNlbWFuYU9iaj8uZDMwX3JlZmVyZW5jaWFfZGVzZGUsIHNlbWFuYU9iaj8uZDMwX3JlZmVyZW5jaWFfaGFzdGEpO1xyXG4gICAgY29uc3QgcGVyc29uYXNBcnJheSA9IEFycmF5LmlzQXJyYXkocmVzcHVlc3Rhc0F1bWVudGFkYXM/LlsncGVyc29uYXMnIGFzIElkVW5pZGFkQW5hbGlzaXNdKSBcclxuICAgICAgICA/IHJlc3B1ZXN0YXNBdW1lbnRhZGFzWydwZXJzb25hcycgYXMgSWRVbmlkYWRBbmFsaXNpc10gYXMgYW55W10gOiBbXTtcclxuICAgIGNvbnN0IGJ1c2NhclBlcnNvbmEgPSAobnVtPzogYW55KSA9PiBcclxuICAgICAgICBudW0gIT0gbnVsbCA/IHBlcnNvbmFzQXJyYXkuZmluZCgocDogYW55LCBpZHg6IG51bWJlcikgPT4gKHA/LnBlcnNvbmEgIT0gbnVsbCA/IE51bWJlcihwLnBlcnNvbmEpID09PSBOdW1iZXIobnVtKSA6IChpZHggKyAxKSA9PT0gTnVtYmVyKG51bSkpKSA6IG51bGw7XHJcbiAgICBjb25zdCB0ZXh0b1BhcmVudGVzY28gPSAocDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcDQgPSBwPy5wNCA/PyBwPy5wNHI7XHJcbiAgICAgICAgcmV0dXJuIHA0ICE9IG51bGwgPyBvYnRlbmVyVGV4dG9QYXJlbnRlc2NvKE51bWJlcihwNCksIGVzdHJ1Y3R1cmEub3BlcmF0aXZvKSA6IG51bGw7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZXNFbnRyZWEgPSByZXNwdWVzdGFzQXVtZW50YWRhcz8uWydlbnRyZWEnIGFzIElkVmFyaWFibGVdID09IDE7XHJcbiAgICBjb25zdCBub21icmVyID0gcmVzcHVlc3Rhc0F1bWVudGFkYXM/Llsnbm9tYnJlcicgYXMgSWRWYXJpYWJsZV07XHJcbiAgICBjb25zdCBwZXJzb25hUmVzcCA9IGVzRW50cmVhID8gYnVzY2FyUGVyc29uYShyZXNwdWVzdGFzQXVtZW50YWRhcz8uWydyZXNwb25kJyBhcyBJZFZhcmlhYmxlXSkgOiBudWxsO1xyXG4gICAgY29uc3QgcGVyc29uYVJlc3BpID0gZXNFbnRyZWEgPyBidXNjYXJQZXJzb25hKHJlc3B1ZXN0YXNBdW1lbnRhZGFzPy5bJ2NyX251bV9taWVtYnJvJyBhcyBJZFZhcmlhYmxlXSkgOiBudWxsO1xyXG4gICAgY29uc3QgamVmZSA9IGVzRW50cmVhID8gYnVzY2FyUGVyc29uYSgxKSA6IG51bGw7XHJcbiAgICBjb25zdCBwYXJlbnRSZXNwID0gdGV4dG9QYXJlbnRlc2NvKHBlcnNvbmFSZXNwKTtcclxuICAgIGNvbnN0IHBhcmVudFJlc3BpID0gdGV4dG9QYXJlbnRlc2NvKHBlcnNvbmFSZXNwaSk7XHJcbiAgICBjb25zdCB0b3RhbEggPSByZXNwdWVzdGFzQXVtZW50YWRhcz8uWyd0b3RhbF9oJyBhcyBJZFZhcmlhYmxlXSA/PyByZXNwdWVzdGFzQXVtZW50YWRhcz8uWyd0b3RhbF9oX3N1cCcgYXMgSWRWYXJpYWJsZV07XHJcbiAgICBjb25zdCBmUmVhbGl6ID0gcmVzcHVlc3Rhc0F1bWVudGFkYXM/LlsnZl9yZWFsaXpfbycgYXMgSWRWYXJpYWJsZV07XHJcbiAgICBjb25zdCBjb21vZGluZXNDYWxjdWxhZG9zOiBSZWNvcmQ8SWRDb21vZGluLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgIC4uLmNvbW9kaW5lc0luaWNpYWxlcyxcclxuICAgICAgICBjYW50aV9ob2dhcmVzOiB0b3RhbEggIT0gbnVsbCA/IFN0cmluZyh0b3RhbEgpIDogJy4uLi4uLi4uJyxcclxuICAgICAgICBmcmVhbGl6OiBmUmVhbGl6ICE9IG51bGwgPyBTdHJpbmcoZlJlYWxpeikgOiAnLi4uLi4uLi4nLFxyXG4gICAgICAgIHJlc3BzMTogKGVzRW50cmVhICYmIG5vbWJyZXIpID8gU3RyaW5nKG5vbWJyZXIpIDogJy4uLi4uLi4uJyxcclxuICAgICAgICBwYXJlbnRzMTogKGVzRW50cmVhICYmIHBhcmVudFJlc3ApID8gcGFyZW50UmVzcCA6ICcuLi4uLi4uLicsXHJcbiAgICAgICAgcmVzcGkxOiAoZXNFbnRyZWEgJiYgcGVyc29uYVJlc3BpPy5ub21icmUpID8gU3RyaW5nKHBlcnNvbmFSZXNwaS5ub21icmUpIDogJy4uLi4uLi4uJyxcclxuICAgICAgICBwYXJlbnRpMTogKGVzRW50cmVhICYmIHBhcmVudFJlc3BpKSA/IHBhcmVudFJlc3BpIDogJy4uLi4uLi4uJyxcclxuICAgICAgICBuamVmZTogKGVzRW50cmVhICYmIGplZmU/Lm5vbWJyZSkgPyBTdHJpbmcoamVmZS5ub21icmUpIDogJy4uLi4uLi4uJyxcclxuICAgICAgICAuLi4oc2VtUmVmICYmIHsgU0VNX1JFRjogc2VtUmVmIH0pLFxyXG4gICAgICAgIC4uLihkMzBSZWYgJiYgeyBEMzBfUkVGOiBkMzBSZWYgfSksXHJcbiAgICAgICAgLi4uKHNlbWFuYU9iaj8ubWVzX3JlZmVyZW5jaWEgJiYgeyBNRVNfUkVGOiBtZXNSZWZlcmVuY2lhKHNlbWFuYU9iai5tZXNfcmVmZXJlbmNpYSkgfSksXHJcbiAgICAgICAgLi4uKHNlbWFuYU51bWVybyAhPSBudWxsICYmIHsgU0VNX05VTTogU3RyaW5nKHNlbWFuYU51bWVybykgfSksXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc3RvcmUgPSBnZXRTdG9yZUZvcm11bGFyaW8oKTtcclxuICAgIGlmICghc3RvcmUpIHJldHVybjtcclxuICAgIGNvbnN0IGFjdHVhbCA9IChzdG9yZS5nZXRTdGF0ZSgpIGFzIENhc29TdGF0ZSk/Lm9wY2lvbmVzPy5jb21vZGluZXMgfHwgY29tb2RpbmVzSW5pY2lhbGVzO1xyXG4gICAgY29uc3QgY2FtYmlvID0gT2JqZWN0LmtleXMoY29tb2RpbmVzQ2FsY3VsYWRvcykuc29tZShcclxuICAgICAgICAoa2V5KSA9PiBhY3R1YWxba2V5IGFzIElkQ29tb2Rpbl0gIT09IGNvbW9kaW5lc0NhbGN1bGFkb3Nba2V5IGFzIElkQ29tb2Rpbl1cclxuICAgICk7XHJcbiAgICBpZiAoY2FtYmlvKSB7XHJcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goZGlzcGF0Y2hlcnMuQ0FNQklBUl9DT01PRElORVMoY29tb2RpbmVzQ2FsY3VsYWRvcykpO1xyXG4gICAgfVxyXG59XHJcblxyXG5zZXRDYWxjdWxhckNvbW9kaW5lcyhjYWxjdWxhckNvbW9kaW5lcyk7XHJcblxyXG4vL0ZJTiBDT05UUk9MIFBFU1RBw5FBU1xyXG5cclxuZnVuY3Rpb24gbG9hZENTUyhjc3NVUkw6IHN0cmluZywgaWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XHJcbiAgICAgICAgbGluay5ocmVmID0gY3NzVVJMO1xyXG4gICAgICAgIGxpbmsuaWQgPSBpZCB8fCBjc3NVUkw7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgdHJhZSAke2Nzc1VSTH1gKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxpbmsub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGNhcmdhbmRvIGVsIGVzdGlsbycsIGVycilcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgcHJvYmxlbWEgY2FyZ2FuZG8gZXN0aWxvICR7Y3NzVVJMfWApKVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDU1NCeUlkKGlkOiBzdHJpbmcpIHtcclxuICAgIHZhciBsaW5rTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGxpbmtOb2RlPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZSk7XHJcbn1cclxuXHJcbmNvbnN0IEJPT1RTVFJBUF81XzFfM19TUkMgPSAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJzsiXX0=
|