dmencu 2.0.6 → 2.0.7
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 +13 -11
- package/dist/client/unlogged/bypass-formulario.js +12 -6
- package/dist/client/unlogged/render-formulario.tsx +3 -2
- package/dist/unlogged/unlogged/bypass-formulario.js +12 -6
- package/dist/unlogged/unlogged/render-formulario.d.ts +1 -1
- package/dist/unlogged/unlogged/render-formulario.js +3 -2
- package/dist/unlogged/unlogged/render-formulario.tsx +3 -2
- package/package.json +1 -1
|
@@ -175,6 +175,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
175
175
|
]).create());
|
|
176
176
|
}
|
|
177
177
|
};
|
|
178
|
+
const mostrarInfoModo = (mainLayout) => __awaiter(void 0, void 0, void 0, function* () {
|
|
179
|
+
const modoDmDefecto = yield my.ajax.modo_dm_defecto_obtener({});
|
|
180
|
+
let modoDM = my.getLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY) || modoDmDefecto;
|
|
181
|
+
my.setLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY, modoDM);
|
|
182
|
+
var divAvisoModo = js_to_html_1.html.div([
|
|
183
|
+
js_to_html_1.html.div(`modo actual: ${modoDM}.`)
|
|
184
|
+
]).create();
|
|
185
|
+
mainLayout.appendChild(divAvisoModo);
|
|
186
|
+
return modoDM;
|
|
187
|
+
});
|
|
178
188
|
function cambiarModoDMEnLocalStorage(modoActual) {
|
|
179
189
|
modoActual = modoActual == 'produc' ? 'capa' : 'produc';
|
|
180
190
|
my.setLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY, modoActual);
|
|
@@ -204,11 +214,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
204
214
|
});
|
|
205
215
|
myOwn.wScreens.sincronizar_dm = function () {
|
|
206
216
|
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
-
const modoDmDefecto = yield my.ajax.modo_dm_defecto_obtener({});
|
|
208
|
-
my.setLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY, my.getLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY) || modoDmDefecto);
|
|
209
217
|
var mainLayout = document.getElementById('main_layout');
|
|
218
|
+
yield mostrarInfoModo(mainLayout);
|
|
210
219
|
var procederButton = js_to_html_1.html.button({ class: 'download-dm-button-cont' }, 'proceder ⇒').create();
|
|
211
|
-
mainLayout.appendChild(js_to_html_1.html.div(my.getLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY) == 'capa' ? '(ATENCION!!! el DM está en MODO CAPACITACIÓN)' : '').create());
|
|
212
220
|
var divAvisoSincro = js_to_html_1.html.div().create();
|
|
213
221
|
mostrarInfoLocal(mainLayout, 'información a transmitir', null, false);
|
|
214
222
|
mainLayout.appendChild(procederButton);
|
|
@@ -219,15 +227,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
219
227
|
myOwn.wScreens.cambiar_modo_dm = function () {
|
|
220
228
|
return __awaiter(this, void 0, void 0, function* () {
|
|
221
229
|
var mainLayout = document.getElementById('main_layout');
|
|
222
|
-
const
|
|
223
|
-
let modoDM = my.getLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY) || modoDmDefecto;
|
|
224
|
-
my.setLocalVar(bypass_formulario_1.MODO_DM_LOCALSTORAGE_KEY, modoDM);
|
|
225
|
-
var divAvisoModo = js_to_html_1.html.div([
|
|
226
|
-
js_to_html_1.html.div(`modo actual: ${modoDM}`)
|
|
227
|
-
]).create();
|
|
230
|
+
const modoDM = yield mostrarInfoModo(mainLayout);
|
|
228
231
|
var procederButton = js_to_html_1.html.button({ class: 'cambiar-modo-dm-button' }, `cambiar a modo ${modoDM == 'produc' ? 'capa' : 'produc'} ⇒`).create();
|
|
229
232
|
var divAvisoSincro = js_to_html_1.html.div().create();
|
|
230
|
-
mainLayout.appendChild(divAvisoModo);
|
|
231
233
|
mostrarInfoLocal(mainLayout, `información modo "${modoDM}" a transmitir`, null, false);
|
|
232
234
|
mainLayout.appendChild(procederButton);
|
|
233
235
|
mainLayout.appendChild(divAvisoSincro);
|
|
@@ -764,4 +766,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
764
766
|
return [].concat.apply([], arrays);
|
|
765
767
|
}
|
|
766
768
|
});
|
|
767
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUs3RCxrQ0FBa0M7SUFDbEMscUVBQThHO0lBQzlHLG1FQUFrSjtJQUVsSixrQkFBa0I7SUFFbEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQzdCLElBQUksaUJBQWlCLEdBQWMsSUFBSSxDQUFDO0lBRXhDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBUSxFQUFFO1FBQ3BDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNmLElBQUcsQ0FBQztZQUNBLGlCQUFpQixHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUFBLE9BQU0sR0FBRyxFQUFDLENBQUM7WUFDUixpQkFBaUIsR0FBQyxJQUFJLENBQUM7UUFDM0IsQ0FBQztRQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFDO1lBQzFCLFVBQVUsRUFBQztnQkFDUCxFQUFDLElBQUksRUFBQyxXQUFXLEVBQUcsUUFBUSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFDLFlBQVksRUFBQztnQkFDN0YsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFPLFFBQVEsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDO2dCQUN0RixFQUFDLElBQUksRUFBQyxLQUFLLEVBQVMsUUFBUSxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxFQUFDO2FBQy9EO1lBQ0QsVUFBVSxFQUFDLElBQUk7WUFDZixVQUFVLEVBQUMsQ0FBTyxNQUFNLEVBQUMsRUFBRTs7Z0JBQ3ZCLHNCQUFzQjtnQkFD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IjtcclxuaW1wb3J0IHt0cmFlckVzdHJ1Y3R1cmF9IGZyb20gXCIuLi91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IENhc29TdGF0ZSwgIFxyXG4gICAgSWRGb3JtdWxhcmlvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRFbmMsIElkT3BlcmF0aXZvLCBJZFRhcmVhLCBFc3RhZG9BY2Npb24sIERpcmVjY2lvbkFjY2lvbixcclxuICAgIENhbXBvUGtSYWl6LCBNb2RvRE1cclxufSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7Z2V0RXN0cnVjdHVyYSwgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MsIE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWX0gZnJvbSBcIi4uL3VubG9nZ2VkL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHtCQUNLVVBTLCBjYXJnYXJFc3RydWN0dXJhLCBjYXJnYXJIb2phRGVSdXRhLCBHTE9WQVJfREFUT1NCWVBBU1MsIEdMT1ZBUl9FU1RSVUNUVVJBLCBHTE9WQVJfTU9ET0JZUEFTU30gZnJvbSBcIi4uL3VubG9nZ2VkL2FicmlyLWZvcm11bGFyaW9cIlxyXG5cclxuLy9UT0RPIEdFTkVSQUxJWkFSXHJcblxyXG5jb25zdCBUQVJFQV9ERUZBVUxUID0gJ2VuY3UnO1xyXG52YXIgT1BFUkFUSVZPX0RFRkFVTFQ6c3RyaW5nfG51bGw9IG51bGw7XHJcblxyXG5teU93bi5hdXRvU2V0dXBGdW5jdGlvbnMucHVzaChhc3luYyAoKT0+e1xyXG4gICAgdmFyIG15ID0gbXlPd247ICAgIFxyXG4gICAgdHJ5e1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUID0gYXdhaXQgbXkuYWpheC5vcGVyYXRpdm9fZ2V0KHt9KTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUPW51bGw7XHJcbiAgICB9XHJcbiAgICBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YT17XHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6T1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpUQVJFQV9ERUZBVUxULCByZWZlcmVuY2VzOiAndGFyZWFzJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInLCBkZWZhdWx0VmFsdWU6MTMwMDMxfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKHBhcmFtcyk9PntcclxuICAgICAgICAgICAgLy8gYW50ZXM6IGFicmlyRGlyZWN0b1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgZW5jLCB0YXJlYX0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgICAgICB2YXIgY2FyZ2EgPSBhd2FpdCBteS5hamF4LmRtX2ZvcnBrcmFpel9jYXJnYXIoe29wZXJhdGl2bywgcGtfcmFpel92YWx1ZTplbmMsIHRhcmVhfSkgYXMgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXM7XHJcbiAgICAgICAgICAgIGlmKCFlc3RydWN0dXJhIHx8IChlc3RydWN0dXJhLnRpbWVzdGFtcD8/MCkgPCBjYXJnYS50aW1lc3RhbXBFc3RydWN0dXJhISB8fCBlc3RydWN0dXJhLm9wZXJhdGl2byAhPSBvcGVyYXRpdm8gfHwgbXkuY29uZmlnLmNvbmZpZy5kZXZlbCl7XHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhID0gYXdhaXQgdHJhZXJFc3RydWN0dXJhKHtvcGVyYXRpdm99KVxyXG4gICAgICAgICAgICAgICAgY2FyZ2FyRXN0cnVjdHVyYShlc3RydWN0dXJhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgdmFyIHN0YXRlOkNhc29TdGF0ZSA9IHt9XHJcbiAgICAgICAgICAgIGluaWNpYWxpemFyU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0ge2Zvcm11bGFyaW86Y2FyZ2EuaW5mb3JtYWNpb25IZHJbZW5jIGFzIElkRW5jXS50YXJlYS5tYWluX2Zvcm0sIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOmVuY307XHJcbiAgICAgICAgICAgIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3NFbkJhc2VEZURhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocGVyc2lzdGVudGVzLnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXN0w6EgaW50ZW50YW5kbyBtb2RpZmljYXIgdW5hIGVuY3Vlc3RhIGFiaWVydGEgY29tbyBzb2xvIGxlY3R1cmEsIG5vIHNlIGd1YXJkYXJvbiBsb3MgY2FtYmlvc1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIoe29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYoIWNhcmdhLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWwgYXMgQ2FtcG9Qa1JhaXpdXSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNlIGVuY3VlbnRyYSBlbC9sYSAke2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbH0gJHtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXJnYXJIb2phRGVSdXRhKHsuLi5jYXJnYSwgbW9kb0FsbWFjZW5hbWllbnRvOidzZXNzaW9uJ30pO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe29wZXJhdGl2bywgbW9kb0RlbW86ZmFsc2UsIGZvclBrUmFpen0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBteU93bi53U2NyZWVucy5vYnRlbmVyX3RlbGVmb25vPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChfcGFyYW1zKT0+e1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYX0gPSB7b3BlcmF0aXZvOiBPUEVSQVRJVk9fREVGQVVMVCwgdGFyZWE6IFRBUkVBX0RFRkFVTFR9O1xyXG4gICAgICAgICAgICBsZXQgZW5jID0gcGFyc2VJbnQoYXdhaXQgbXkuYWpheC5nZXRfcmFuZG9tX2ZyZWVfY2FzZSh7b3BlcmF0aXZvfSkpOyBcclxuICAgICAgICAgICAgYXdhaXQgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGEubWFpbkFjdGlvbih7b3BlcmF0aXZvLCBlbmMsIHRhcmVhfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLmNvbnNpc3Rpcl9lbmN1ZXN0YT17XHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6T1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJ31cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChwYXJhbXMpPT57XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpblRvcEJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRvcC1iYXInKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYWluVG9wQmFyKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5Ub3BCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgdGFyZWEsIGVuYyB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgbXlPd24uYWpheC5jb25zaXN0aXJfZW5jdWVzdGEoe1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBlbmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRGaWVsZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ29wZXJhdGl2bycsIHZhbHVlOiBvcGVyYXRpdm99KTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ3ZpdmllbmRhJywgdmFsdWU6IGVuY30pO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2R3JpbGxhID0gaHRtbC5kaXYoe2lkOidpbmNvbnNpc3RlbmNpYXMnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZHcmlsbGEsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2Qm90b25lcyA9IGh0bWwuZGl2KHtpZDonYm90b25lcy1wb3N0LWNvbnNpc3Rpcid9LFtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhckJvdG9uQ2VycmFyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBjZXJyYXIgZW5jdWVzdGFgXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZvbHZlciBhIGVuY3Vlc3RhICR7ZW5jfWBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbnNlcnRCZWZvcmUoZGl2Qm90b25lcywgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIG15LnRhYmxlR3JpZChcImluY29uc2lzdGVuY2lhc19jdW1wbGVuX2NvbmRpY2lvblwiLCBkaXZHcmlsbGEse3RhYmxlRGVmOnt9LGZpeGVkRmllbGRzOiBmaXhlZEZpZWxkc30pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuXHJcbi8vcXVpdGEgYm9vdHN0cmFwIGRlbCBoZWFkIHBhcmEgcXVlIG5vIHJvbXBhIGxvcyBlc3RpbG9zIGRlIEJFUGx1cyAoc29sbyBzZSB1c2EgYm9vdHN0cmFwIGVuIGVsIGZvcm0pXHJcbnZhciBsaW5rTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tocmVmPVwiY3NzL2Jvb3RzdHJhcC5taW4uY3NzXCJdJyk7XHJcbmxpbmtOb2RlWzBdPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZVswXSk7XHJcblxyXG5mdW5jdGlvbiBjb25zaXN0aXJfZmlsdHJvKHRhcmVhLCByZWFfdGVtLCByZWEpe1xyXG4gICAgcmV0dXJuIHRhcmVhP3JlYV90ZW06cmVhO1xyXG59O1xyXG5cclxudmFyIHRhcmVhczphbnkgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gaHRtbE51bWVybyhudW06bnVtYmVyKXtcclxuICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOidudW1lcm8nfSwnJysobnVtPz8nJykpXHJcbn1cclxuXHJcbnZhciBwZXJzaXN0aXJFbk1lbW9yaWEgPSBhc3luYyAocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSA9PiB7XHJcbiAgICB2YXIge21vZG9BbG1hY2VuYW1pZW50b30gPSBwZXJzaXN0ZW50ZXNcclxuICAgICAgICBpZihtb2RvQWxtYWNlbmFtaWVudG89PSdsb2NhbCcpe1xyXG4gICAgICAgICAgICBteS5zZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9XHJcbiAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfTU9ET0JZUEFTUywgbW9kb0FsbWFjZW5hbWllbnRvKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzaW5jcm9uaXphckRhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlc3xudWxsLCBjYW1iaWFNb2RvRE06Ym9vbGVhbil7XHJcbiAgICBjb25zdCBtb2RvRG1EZWZlY3RvID0gYXdhaXQgbXkuYWpheC5tb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcih7fSk7XHJcbiAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBteS5nZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVkpIHx8IG1vZG9EbURlZmVjdG87XHJcbiAgICBteS5zZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVksIG1vZG9ETSk7XHJcbiAgICB2YXIgZGF0b3MgPSBhd2FpdCBteS5hamF4LmRtX3NpbmNyb25pemFyKHtwZXJzaXN0ZW50ZXMsIG1vZG9fZG06bW9kb0RNLCBjYW1iaWFfbW9kb19kbTpjYW1iaWFNb2RvRE19KTtcclxuICAgIHZhciBvcGVyYXRpdm8gPSBkYXRvcy5vcGVyYXRpdm87XHJcbiAgICBwZXJzaXN0aXJFbk1lbW9yaWEoey4uLmRhdG9zLCBtb2RvQWxtYWNlbmFtaWVudG86J2xvY2FsJ30pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoe29wZXJhdGl2b30pXHJcbiAgICBteS5zZXRMb2NhbFZhcihHTE9WQVJfRVNUUlVDVFVSQSwgZXN0cnVjdHVyYSk7XHJcbiAgICBteS5yZW1vdmVMb2NhbFZhcihCQUNLVVBTKTtcclxuICAgIHJldHVybiBkYXRvcztcclxufVxyXG5cclxuXHJcblxyXG52YXIgbW9zdHJhckluZm9Mb2NhbCA9IChkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudCwgdGl0dWxvOnN0cmluZywgbnJvU2luY3JvOm51bWJlcnxudWxsLCBtb3N0cmFyTGlua0hkcjogYm9vbGVhbik9PntcclxuICAgIGxldCBkYXRvc0J5UGFzcyA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUyk7XHJcbiAgICBsZXQgZXN0cnVjdHVyYSA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9FU1RSVUNUVVJBKTtcclxuICAgIGlmKGRhdG9zQnlQYXNzKXtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmQoaHRtbC5kaXYoe2lkOidhdmlzby1zaW5jcm8nfSwgW1xyXG4gICAgICAgICAgICBucm9TaW5jcm8/aHRtbC5wKFtcIk7Dum1lcm8gZGUgc2luY3Jvbml6YWNpw7NuOiBcIiwgaHRtbC5iKFwiXCIrbnJvU2luY3JvLnRvU3RyaW5nKCkpXSk6bnVsbCxcclxuICAgICAgICAgICAgaHRtbC5oNCh0aXR1bG8pLFxyXG4gICAgICAgICAgICBodG1sLnAoW2h0bWxOdW1lcm8obGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykuYXJyYXkoKS5sZW5ndGgpLCcgYXJlYXM6ICcsbGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyldKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXSkuYXJyYXkoKS5sZW5ndGgpLCAnICcgKyBlc3RydWN0dXJhLnVhUHBhbF0pLFxyXG4gICAgICAgICAgICBtb3N0cmFyTGlua0hkcj9odG1sLmEoe2hyZWY6Jy4vY2FtcG8nfSxbaHRtbC5iKCdJUiBBIExBIEhPSkEgREUgUlVUQScpXSk6bnVsbFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdkF2aXNvU2luY3JvLmFwcGVuZENoaWxkKGh0bWwuZGl2KHtjbGFzczonYXZpc28nfSxbXHJcbiAgICAgICAgICAgIGh0bWwuaDQoJ1Npc3RlbWEgdmFjw61vJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSBmb3JtdWxhcmlvcycpLFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2FtYmlhck1vZG9ETUVuTG9jYWxTdG9yYWdlKG1vZG9BY3R1YWw6TW9kb0RNKXtcclxuICAgIG1vZG9BY3R1YWwgPSBtb2RvQWN0dWFsPT0ncHJvZHVjJz8nY2FwYSc6J3Byb2R1Yyc7XHJcbiAgICBteS5zZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVksbW9kb0FjdHVhbCk7XHJcbn1cclxuXHJcbnZhciBwcm9jZWRlclNpbmNyb0Z1biA9IGFzeW5jIChidXR0b246SFRNTEJ1dHRvbkVsZW1lbnQsIGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50LCBjYW1iaWFNb2RvRE06Ym9vbGVhbik9PntcclxuICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgYnV0dG9uLmNsYXNzTmFtZT0nZG93bmxvYWQtZG0tYnV0dG9uJztcclxuICAgIGRpdkF2aXNvU2luY3JvLmlubmVySFRNTD0nJztcclxuICAgIHRyeXtcclxuICAgICAgICB2YXIgZGF0b3NCeVBhc3M6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgPSBteS5nZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MpO1xyXG4gICAgICAgIHZhciBkYXRvcyA9IGF3YWl0IHNpbmNyb25pemFyRGF0b3MoZGF0b3NCeVBhc3MsIGNhbWJpYU1vZG9ETSk7XHJcbiAgICAgICAgY29uc3QgbW9kb0RtRGVmZWN0byA9IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgICAgIGxldCBtb2RvRE1BY3R1YWw6IE1vZG9ETSA9IG15LmdldExvY2FsVmFyKE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSkgfHwgbW9kb0RtRGVmZWN0bztcclxuICAgICAgICBpZihjYW1iaWFNb2RvRE0pe1xyXG4gICAgICAgICAgICBjYW1iaWFyTW9kb0RNRW5Mb2NhbFN0b3JhZ2UobW9kb0RNQWN0dWFsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbW9zdHJhckluZm9Mb2NhbChkaXZBdmlzb1NpbmNybywgJ2RhdG9zIHJlY2liaWRvcycsIGRhdG9zLm51bV9zaW5jcm8sIHRydWUpXHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgdGhyb3cgZXJyXHJcbiAgICB9ZmluYWxseXtcclxuICAgICAgICBidXR0b24uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgYnV0dG9uLmNsYXNzTmFtZT0nZG93bmxvYWQtZG0tYnV0dG9uLWNvbnQnO1xyXG4gICAgfVxyXG59XHJcbm15T3duLndTY3JlZW5zLnNpbmNyb25pemFyX2RtPWFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICBjb25zdCBtb2RvRG1EZWZlY3RvID0gYXdhaXQgbXkuYWpheC5tb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcih7fSk7XHJcbiAgICBteS5zZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVksbXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKSB8fCBtb2RvRG1EZWZlY3RvKTtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgdmFyIHByb2NlZGVyQnV0dG9uID0gaHRtbC5idXR0b24oe2NsYXNzOidkb3dubG9hZC1kbS1idXR0b24tY29udCd9LCdwcm9jZWRlciDih5InKS5jcmVhdGUoKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgaHRtbC5kaXYobXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKT09J2NhcGEnPycoQVRFTkNJT04hISEgZWwgRE0gZXN0w6EgZW4gTU9ETyBDQVBBQ0lUQUNJw5NOKSc6JycpLmNyZWF0ZSgpXHJcbiAgICApXHJcbiAgICB2YXIgZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQ9aHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgIG1vc3RyYXJJbmZvTG9jYWwobWFpbkxheW91dCBhcyBIVE1MRGl2RWxlbWVudCwgJ2luZm9ybWFjacOzbiBhIHRyYW5zbWl0aXInLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gKCk9PnByb2NlZGVyU2luY3JvRnVuKHByb2NlZGVyQnV0dG9uLCBkaXZBdmlzb1NpbmNybywgZmFsc2UpXHJcbn07XHJcblxyXG5teU93bi53U2NyZWVucy5jYW1iaWFyX21vZG9fZG09YXN5bmMgZnVuY3Rpb24oKXtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgY29uc3QgbW9kb0RtRGVmZWN0byA9IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgbGV0IG1vZG9ETTogTW9kb0RNID0gbXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKSB8fCBtb2RvRG1EZWZlY3RvO1xyXG4gICAgbXkuc2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZLCBtb2RvRE0pO1xyXG4gICAgdmFyIGRpdkF2aXNvTW9kbzpIVE1MRGl2RWxlbWVudD1odG1sLmRpdihbXHJcbiAgICAgICAgaHRtbC5kaXYoYG1vZG8gYWN0dWFsOiAke21vZG9ETX1gKVxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICB2YXIgcHJvY2VkZXJCdXR0b24gPSBodG1sLmJ1dHRvbih7Y2xhc3M6J2NhbWJpYXItbW9kby1kbS1idXR0b24nfSxgY2FtYmlhciBhIG1vZG8gJHttb2RvRE0gPT0gJ3Byb2R1Yyc/J2NhcGEnOidwcm9kdWMnfSDih5JgKS5jcmVhdGUoKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudD1odG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb01vZG8pO1xyXG4gICAgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCBgaW5mb3JtYWNpw7NuIG1vZG8gXCIke21vZG9ETX1cIiBhIHRyYW5zbWl0aXJgLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCk9PntcclxuICAgICAgICBhd2FpdCBwcm9jZWRlclNpbmNyb0Z1bihwcm9jZWRlckJ1dHRvbiwgZGl2QXZpc29TaW5jcm8sIHRydWUpO1xyXG4gICAgICAgIG1haW5MYXlvdXQuaW5uZXJIVE1MPScnO1xyXG4gICAgICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KGBNT0RPICR7bXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKX0gQUNUSVZBRE9gKS5jcmVhdGUoKVxyXG4gICAgICAgIClcclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGluaWNpYWxpemFyU3RhdGUoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgc3RhdGUubW9kbyA9IHtcclxuICAgICAgICBkZW1vOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIC8vIE9KTyBzdGF0ZS5vcGNpb25lcyBzZSBtb2RpZmljYSBhY8OhIHkgZW4gb3RybyBsYWRvIGNvbiBlc3RlIG1pc21vIGNhcnRlbFxyXG4gICAgc3RhdGUub3BjaW9uZXMgPSB7XHJcbiAgICAgICAgYmllbnZlbmlkbzogdHJ1ZSxcclxuICAgICAgICBmb3JQazogbnVsbCxcclxuICAgICAgICBwaWxhRm9yUGs6IFtdLFxyXG4gICAgICAgIG1vZG9EZXNwbGllZ3VlOiBcInJlbGV2YW1pZW50b1wiLFxyXG4gICAgICAgIG1vZG9EaXJlY3RvOiBmYWxzZSxcclxuICAgICAgICBtb2RvQm9ycmFyUmVzcHVlc3RhOiBudWxsLFxyXG4gICAgICAgIGNvbkNhbXBvT3BjaW9uZXM6IGZhbHNlLFxyXG4gICAgICAgIHNhbHRvQXV0b21hdGljbzogdHJ1ZSxcclxuICAgIH07XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIHN0YXRlLmZlZWRiYWNrUm93VmFsaWRhdG9yID0ge307XHJcbn1cclxuLypcclxuZnVuY3Rpb24gbW9zdHJhckRhdG9zUGVyc29uYShoYXlEYXRvczpib29sZWFuLCBkYXRvczphbnksIGRpdlJlc3VsdDpIVE1MRGl2RWxlbWVudCl7XHJcbiAgICAvL1RPRE86IEVWQUxVQVIgU0kgQ09OVklFTkUgVFJBRVJMTyBERSBMQSBCQVNFXHJcbiAgICB2YXIgdGlwb3NEb2N1bWVudG8gPSBbJ0ROSSBhcmdlbnRpbm8nLCAnRG9jdW1lbnRvIGV4dHJhbmplcm8nLCAnTm8gdGllbmUgZG9jdW1lbnRvJywgJ090cm8nXTtcclxuICAgIHZhciBwYWlzRG9jdW1lbnRvID0gWydVcnVndWF5JywgJ1BhcmFndWF5JywgJ0JyYXNpbCcsICdCb2xpdmlhJywgJ0NoaWxlJywgJ1BlcsO6JywgJ1ZlbmV6dWVsYScsICdPdHJvJ107XHJcbiAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgaGF5RGF0b3M/XHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHtjbGFzczonZGF0b3MtcGVyc29uYS1jYXJnYWRhJ30sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5oMihcIkRhdG9zIHBlcnNvbmFcIiksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2ZpY2hhLXBlcnNvbmEnfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW2h0bWwubGFiZWwoJ0FwZWxsaWRvOiAnKSwgZGF0b3MuYXBlbGxpZG9dKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbaHRtbC5sYWJlbCgnTm9tYnJlczogJyksIGRhdG9zLm5vbWJyZXNdKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmxhYmVsKCdUaXBvIGRvY3VtZW50bzogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwb3NEb2N1bWVudG9bZGF0b3MudGlwb0RvY3VtZW50by0xXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTQgJiYgZGF0b3MudGlwb0RvY3VtZW50b0VzcGVjaWZpY2Fkbz8nICgnKyBkYXRvcy50aXBvRG9jdW1lbnRvRXNwZWNpZmljYWRvKycpJzonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTIgJiYgZGF0b3MucGFpc0RvY3VtZW50bz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5sYWJlbCgnUGFpczogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpc0RvY3VtZW50b1tkYXRvcy5wYWlzRG9jdW1lbnRvLTFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0b3MucGFpc0RvY3VtZW50bz09OCAmJiBkYXRvcy5wYWlzRG9jdW1lbnRvRXNwZWNpZmljYWRvPycgKCcrZGF0b3MucGFpc0RvY3VtZW50b0VzcGVjaWZpY2FkbysnKSc6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvIT0zICYmIGRhdG9zLnRpcG9Eb2N1bWVudG8/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ07CuiBEb2N1bWVudG86ICcpLCBkYXRvcy5kb2N1bWVudG9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5jZWx1bGFyP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdDZWwuOiAnKSwgZGF0b3MuY2VsdWxhcl0pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLmVtYWlsP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdFbWFpbDogJyksIGRhdG9zLmVtYWlsXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGVsZWZvbm9BbHRlcm5hdGl2bz9odG1sLmRpdihbaHRtbC5sYWJlbCgnVGVsLiBhbHRlcm5hdGl2bzogJyksIGRhdG9zLnRlbGVmb25vQWx0ZXJuYXRpdm9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5vYnNlcnZhY2lvbmVzP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdPYnNlcnZhY2lvbmVzOiAnKSwgZGF0b3Mub2JzZXJ2YWNpb25lc10pOicnLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICA6XHJcbiAgICAgICAgICAgIGh0bWwucChcIk5vIHNlIGVuY29udHLDsyB1bmEgZW5jdWVzdGEgcGFyYSBsYSBldGlxdWV0YSBjYXJnYWRhXCIpLmNyZWF0ZSgpXHJcbiAgICApXHJcbn1cclxuKi9cclxuLypteU93bi5jbGllbnRTaWRlcy50YXJlYXNUZW1Sb3c9e1xyXG4gICAgdXBkYXRlOihkZXBvdCk9PntcclxuICAgICAgICB2YXIgdGFyZWE6J25hZGEnfCdwcmVhc2lnbmFyJ3wnY2FyZ2FyJ3wncmVhbGl6YXInfCd2ZXJpZmljYXInPSduYWRhJztcclxuICAgICAgICB2YXIgcm93PWRlcG90LnJvdztcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgdmFyIGlkcGVyPW15LmNvbmZpZy5pZHBlcjtcclxuICAgICAgICB2YXIgZXNwZXJhcjpib29sZWFuPWZhbHNlO1xyXG4gICAgICAgIGlmKHJvdy5oYWJpbGl0YWRhKXtcclxuICAgICAgICAgICAgaWYoIXJvdy5yZWNlcGNpb25pc3RhICYmICFyb3cuYXNpZ25hZG8pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3ByZWFzaWduYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj10cnVlO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LmFzaWduYWRvIHx8ICFyb3cuZmVjaGFfYXNpZ25hY2lvbiB8fCAhcm93Lm9wZXJhY2lvbil7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0nY2FyZ2FyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9cm93LnJlY2VwY2lvbmlzdGEhPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnJlYSl7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0ncmVhbGl6YXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cuYXNpZ25hZG8hPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnZlcmlmaWNhZG8pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3ZlcmlmaWNhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5yZWNlcGNpb25pc3RhIT1pZHBlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9uZXI9e1xyXG4gICAgICAgICAgICByZWNlcGNpb25pc3RhICAgICAgICAgIDp0YXJlYT09J3ByZWFzaWduYXInICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIGFzaWduYWRvICAgICAgICAgICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBmZWNoYV9hc2lnbmFjaW9uICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgb3BlcmFjaW9uICAgICAgICAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIGNhcmdhX29ic2VydmFjaW9uZXM6KHRhcmVhPT0nY2FyZ2FyJyAgICAgfHwgdGFyZWE9PSdyZWFsaXphcicgJiYgIXJvdy5jYXJnYWRvICYmICFyb3cucmVhICkgJiYgcm93LnJlY2VwY2lvbmlzdGE9PWlkcGVyICYmICdvcHRhdGl2bycsXHJcbiAgICAgICAgICAgIHZlcmlmaWNhZG8gICAgICAgICA6dGFyZWE9PSd2ZXJpZmljYXInICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBvYnNfdmVyaWZpY2FkbyAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidvcHRhdGl2bycpLFxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIocG9uZXIpLmZvckVhY2goKHZhbG9yLCBjYW1wbyk9PntcclxuICAgICAgICAgICAgaWYoIXZhbG9yKXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5yZW1vdmVBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbY2FtcG9dLnNldEF0dHJpYnV0ZSgnbXktbWFuZGF0b3J5Jyx2YWxvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uKCl7fVxyXG59XHJcbiovXHJcblxyXG52YXIgY3JlYXJCb3RvbkNlcnJhckVuY3Vlc3RhID0gKGxhYmVsOnN0cmluZyk9PntcclxuICAgIGxldCBwYXRoID0gXCJNMyAzdjE4aDE4VjNIM3ptMTQgMTIuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5elwiO1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHtjbGFzczpcInN2Zy1jZXJyYXItZW5jdWVzdGFcIn0sW1xyXG4gICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgIGQ6cGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsXCIwIDAgMjYgMjZcIik7XHJcbiAgICBsZXQgdmVyID0gaHRtbC5idXR0b24oe2lkOidib3Rvbi1jZXJyYXItZW5jdWVzdGEnfSxbc3ZnLCBsYWJlbF0pLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IGNsb3NlKCk7XHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbmNvbnN0IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhID0gKHVybDpzdHJpbmcpPT57XHJcbiAgICBjb25zdCBBQlJJUl9UQUIgPSBcIl9hYnJpclwiO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBBQlJJUl9UQUIpO1xyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOklkT3BlcmF0aXZvLHRhcmVhOklkVGFyZWEsZW5jdWVzdGE6bnVtYmVyLCBsYWJlbDpzdHJpbmcpPT57XHJcbiAgICB2YXIgdXAgPSB7XHJcbiAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTp0YXJlYSxcclxuICAgICAgICBlbmM6ZW5jdWVzdGFcclxuICAgIH1cclxuICAgIGxldCB2ZXIgPSBodG1sLmJ1dHRvbih7aWQ6J2JvdG9uLXZvbHZlci1hLWVuY3Vlc3RhJ30sbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhKGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yK2B3PWFicmlyX2VuY3Vlc3RhJnVwPSR7SlNPTi5zdHJpbmdpZnkodXApfSZhdXRvcHJvY2VkPXRydWVgKVxyXG4gICAgcmV0dXJuIHZlclxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMgPSBhc3luYyAoZGVwb3Q6bXlPd24uRGVwb3QsIGZpZWxkTmFtZTpzdHJpbmcsIGxhYmVsOidhYnJpcid8J3ZlcicpPT57XHJcbiAgICB0YXJlYXMgPSB0YXJlYXM/dGFyZWFzOihhd2FpdCBteU93bi5hamF4LnRhYmxlX2RhdGEoe3RhYmxlOiBgdGFyZWFzYCwgZml4ZWRGaWVsZHM6W119KSk7XHJcbiAgICB2YXIgbWlzVGFyZWFzID0gdGFyZWFzLmZpbHRlcigodGFyZWEpPT5cclxuICAgICAgICAhIXRhcmVhLm1haW5fZm9ybSAmJiB0YXJlYS5vcGVyYXRpdm89PWRlcG90LnJvdy5vcGVyYXRpdm8gJiYgKGRlcG90Lm1hbmFnZXIuZGVmLm11ZXN0cmFBYnJpckVuVG9kYXNMYXNUYXJlYXM/dHJ1ZTpkZXBvdC5yb3cudGFyZWEgPT0gdGFyZWEudGFyZWEpXHJcbiAgICApO1xyXG4gICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5pbm5lckhUTUw9Jyc7XHJcbiAgICBtaXNUYXJlYXMuZm9yRWFjaCgodGFyZWE6e3RhcmVhOnN0cmluZywgbm9tYnJlOnN0cmluZywgbWFpbl9mb3JtOklkRm9ybXVsYXJpb30pPT57XHJcbiAgICAgICAgbGV0IGJ1dHRvbkxhYmVsID0gYCR7bGFiZWx9ICR7dGFyZWEudGFyZWF9YDtcclxuICAgICAgICBsZXQgdmVyID0gY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgIGRlcG90LnJvdy5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIHRhcmVhLnRhcmVhIGFzIElkVGFyZWEsIFxyXG4gICAgICAgICAgICBOdW1iZXIoZGVwb3Qucm93LmVuYyksXHJcbiAgICAgICAgICAgIGJ1dHRvbkxhYmVsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB2ZXIuc3R5bGU9J21hcmdpbjowcHggMnB4Oyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZCh2ZXIpO1xyXG4gICAgfSlcclxufVxyXG5cclxudmFyIGdldEFicmlyT3ZlciA9IChfZGVwb3Q6bXlPd24uRGVwb3QsX2ZpZWxkTmFtZTpzdHJpbmcpOidhYnJpcic9PidhYnJpcidcclxuICAgIC8vXHJcbiAgICAvKihkZXBvdC5yb3cuY2FyZ2Fkb19kbSB8fCAhZGVwb3Qucm93Wydlc3RhZG9zX19wZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSddICYmIGRlcG90LnJvdy5hc2lnbmFkbyAhPSBteS5jb25maWcuaWRwZXIpP1xyXG4gICAgICAgICd2ZXInOidhYnJpcidcclxuICAgICovXHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXI9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXJSZWNlcGNpb249e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMudmVySWNvbm9Tdmc9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBpZihkZXBvdC5yb3cucGF0aF9pY29ub19zdmcpe1xyXG4gICAgICAgICAgICB2YXIgc3ZnID0gaHRtbC5zdmcoe1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6XCJzdmctYWNjaW9uZXNcIlxyXG4gICAgICAgICAgICB9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZDpkZXBvdC5yb3cucGF0aF9pY29ub19zdmdcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChzdmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbnZhciBjcmVhclNWRyA9IChwYXRoOnN0cmluZyxwcm9wczphbnkpID0+IHtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyhwcm9wcyB8fCB7fSxbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDpwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixcIjAgMCA1MCA1MFwiKTtcclxuICAgIHJldHVybiBzdmdcclxufVxyXG52YXIgY3JlYXJCb3RvbkFjY2lvbiA9IChkZXBvdDpteU93bi5EZXBvdCwgYWN0aW9uOkVzdGFkb0FjY2lvbik9PntcclxuICAgIGxldCAgYWNjaW9uU2luR3Vpb25lcyA9IGFjdGlvbi5lYWNjaW9uLnJlcGxhY2UoJ18nLCcgJyk7XHJcbiAgICB2YXIgc3ZnID0gY3JlYXJTVkcoYWN0aW9uLnBhdGhfaWNvbm9fc3ZnLHtjbGFzczpcInN2Zy1hY2Npb25lc1wifSlcclxuICAgIGlmKGFjdGlvbi5kZXNhY3RpdmFfYm90b24pe1xyXG4gICAgICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOmBzaW4tYm90b24tYWNjaW9uYH0sW2FjY2lvblNpbkd1aW9uZXMsIHN2ZyBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50XSkuY3JlYXRlKClcclxuICAgIH1cclxuICAgIGxldCBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgY2xhc3M6YGJvdG9uLWFjY2lvbiBib3Rvbi1hY2Npb24tJHthY3Rpb24uZWFjY2lvbl9kaXJlY2Npb259YFxyXG4gICAgfSxbXHJcbiAgICAgICAgYCR7YWNjaW9uU2luR3Vpb25lc31gLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBzdmcgZXMgaHRtbGVsZW1lbnRcclxuICAgICAgICBhY3Rpb24ucGF0aF9pY29ub19zdmc/c3ZnOm51bGwsXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCk9PiB7XHJcbiAgICAgICAgdmFyIGFjdGlvbkZ1biA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmFjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWE6IGRlcG90LnJvdy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGljaW9uOiBhY3Rpb24uY29uZGljaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbjogYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhc1RlbVRhYmxlOiBkZXBvdC5kZWYubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3Qse3JldHJpZXZlSWdub3JpbmdXaGVyZTp0cnVlfSkgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKGFjdGlvbi5ub21icmVfd3NjcmVlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9UT0RPIGFjb21vZGFyIGVzdG8gZW4gYWxndW4gbW9tZW50b1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBkZXBvdC5yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86cGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6cGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IE51bWJlcihwYXJhbXMuZW5jKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhYnJpckVuY3Vlc3RhRW5QZXN0YW5uaWFEZWRpY2FkYShsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWUrbXkubWVudVNlcGFyYXRvcitgdz0ke2FjdGlvbi5ub21icmVfd3NjcmVlbn0mdXA9JHtKU09OLnN0cmluZ2lmeSh1cCl9JmF1dG9wcm9jZWQ9dHJ1ZWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICAgICAgLy9yZXRyYXNvIGxhIGhhYmlsaXRhY2nDs24gcG9ycXVlIGEgdmVjZXMgdGFyZGEgZW4gcmVkaWJ1amFyc2UgbGEgYm90b25lcmEgeSBwdWVkZSB0cmFlciBwcm9ibGVtYXMgc2kgZGFuIGRvYmxlIGNsaWNrIFxyXG4gICAgICAgICAgICAgICAgLy95YSBxdWUgZWplY3V0YSBudWV2YW1lbnRlIHVuYSBhY2Npw7NuIHF1ZSB5YSBzZSBlamVjdXTDsyAoeSB0ZXJtaW7DsykgYW50ZXNcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmJ1dHRvbi5kaXNhYmxlZD1mYWxzZSwzMDAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBjb25maXJtUHJvbWlzZU9wdHM6IERpYWxvZ09wdGlvbnMgPSB7fVxyXG4gICAgICAgIGlmKGFjdGlvbi5jb25maXJtYSl7XHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlT3B0cy5hc2tGb3JOb1JlcGVhdCA9ICdubyB2b2x2ZXIgYSBtb3N0cmFyJzsgLy9tdWVzdHJhIG1lbnNhamUgcG9yIGRlZmF1bHQgcGVybyBhbmRhIGlndWFsXHJcbiAgICAgICAgICAgIHZhciBidXR0b25zRGVmID0gW1xyXG4gICAgICAgICAgICAgICAge2xhYmVsOidzw60nLCB2YWx1ZTp0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtsYWJlbDonbm8nLCB2YWx1ZTpmYWxzZX1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZShgY29uZmlybWEgYWNjacOzbiBcIiR7YWNjaW9uU2luR3Vpb25lc31cIj9gLCB7Li4uY29uZmlybVByb21pc2VPcHRzLCBidXR0b25zRGVmfSkudGhlbihhY3Rpb25GdW4pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBhY3Rpb25GdW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnV0dG9uXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNBY2Npb25lcyA9IGFzeW5jIChvcHRzOntkZXBvdDpteU93bi5EZXBvdCwgZmllbGROYW1lOnN0cmluZywgZGlyZWNjaW9uOiBEaXJlY2Npb25BY2Npb259KT0+e1xyXG4gICAgbGV0IHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9ufSA9IG9wdHM7XHJcbiAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgdGQuaW5uZXJIVE1MPScnO1xyXG4gICAgKGRlcG90LnJvd0NvbnRyb2xzLmFjY2lvbmVzLmdldFR5cGVkVmFsdWUoKXx8W10pXHJcbiAgICAgICAgLmZpbHRlcigoYWN0aW9uOkVzdGFkb0FjY2lvbik9PmFjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbj09ZGlyZWNjaW9uKVxyXG4gICAgICAgIC5mb3JFYWNoKChhY3Rpb246RXN0YWRvQWNjaW9uKT0+dGQuYXBwZW5kQ2hpbGQoY3JlYXJCb3RvbkFjY2lvbihkZXBvdCwgYWN0aW9uKSkpO1xyXG59XHJcblxyXG52YXIgY3JlYXJTd2l0Y2ggPSAob3B0czp7cm91bmQ/OmJvb2xlYW4sIGRpc2FibGVkPzpib29sZWFuLCBjaGVja2VkPzpib29sZWFuLCBvbkNsaWNrRnVuOkZ1bmN0aW9uLCBvbkVyckZ1bj86RnVuY3Rpb259KT0+e1xyXG4gICAgdmFyIGNoZWNrYm94ID0gaHRtbC5pbnB1dCh7dHlwZTonY2hlY2tib3gnLCBjaGVja2VkOm9wdHMuY2hlY2tlZH0pLmNyZWF0ZSgpO1xyXG4gICAgY2hlY2tib3gub25jbGljayA9IGFzeW5jKCk9PntcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgIGF3YWl0IG9wdHMub25DbGlja0Z1bigpXHJcbiAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgfWZpbmFsbHl7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBodG1sLmxhYmVsKHtjbGFzczonc3dpdGNoJ30sW1xyXG4gICAgICAgIGNoZWNrYm94LFxyXG4gICAgICAgIGh0bWwuc3Bhbih7Y2xhc3M6YHNsaWRlciAke29wdHMucm91bmQ/J3JvdW5kJzonJ31gfSksXHJcbiAgICBdKS5jcmVhdGUoKTtcclxufVxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuaGFiaWxpdGFyPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICBjcmVhclN3aXRjaCh7XHJcbiAgICAgICAgICAgICAgICByb3VuZDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDpkZXBvdC5yb3cuaGFiaWxpdGFkYSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2tGdW46IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5lbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmdyaWQucmV0cmlldmVSb3dBbmRSZWZyZXNoKGRlcG90KSwzMDApOy8vcGFyYSBxdWUgc2UgdmVhIGVsIGVmZWN0b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0F2YW5jZT17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidhdmFuY2UnfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc1JldHJvY2Vzbz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidyZXRyb2Nlc28nfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0JsYW5xdWVvPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoe2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb246J2JsYW5xdWVvJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gXHJcbmJvdG9uQ2xpZW50U2lkZUVuR3JpbGxhKG9wdHM6IHsgbm9tYnJlQm90b246IHN0cmluZywgbGxhbWFkYTogKGRlcG90OiBteU93bi5EZXBvdCkgPT4gUHJvbWlzZTxhbnk+IH0pIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICAgICAgdmFyIGJvdG9uID0gaHRtbC5idXR0b24ob3B0cy5ub21icmVCb3RvbikuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHRkLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICAgICAgdmFyIHJlc3RhdXJhckJvdG9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYm90b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gb3B0cy5ub21icmVCb3RvbjtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBib3Rvbi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYm90b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAncHJvY2VzYW5kby4uLic7XHJcbiAgICAgICAgICAgICAgICBvcHRzLmxsYW1hZGEoZGVwb3QpLnRoZW4oYXN5bmMgZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgJ29rJyBpbiByZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQub2spe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdyaWQucmV0cmlldmVSb3dBbmRSZWZyZXNoKGRlcG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBvdC5kZXRhaWxDb250cm9scy5pbmNvbnNpc3RlbmNpYXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcG90LmRldGFpbENvbnRyb2xzLmluY29uc2lzdGVuY2lhcy5mb3JjZURpc3BsYXlEZXRhaWxHcmlkKHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAgcmVzdWx0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi50aXRsZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjOEY4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzdGF1cmFyQm90b24sIDI1MDApO1xyXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZiAoKGRlcG90LnJvdy5jb25zaXN0aWRvPT1udWxsICAmJiBkZXBvdC5yb3cucmVhIT1udWxsKSB8fCBkZXBvdC5yb3cubW9kaWZpY2FkbyE9bnVsbCAmJiBkZXBvdC5yb3cuY29uc2lzdGlkbyE9bnVsbCAmJiBkZXBvdC5yb3cubW9kaWZpY2FkbyA+ZGVwb3Qucm93LmNvbnNpc3RpZG8pe1xyXG4gICAgICAgICAgICAvLyAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyM4Q0YnXHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfTtcclxufVxyXG5cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmNvbnNpc3RpciA9IGJvdG9uQ2xpZW50U2lkZUVuR3JpbGxhKHtcclxuICAgIG5vbWJyZUJvdG9uOiAnY29uc2lzdGlyJyxcclxuICAgIGxsYW1hZGE6IGZ1bmN0aW9uIChkZXBvdDogbXlPd24uRGVwb3QpIHtcclxuICAgICAgICB2YXIgbXlSZWFGaWVsZE5hbWUgPSBkZXBvdC5tYW5hZ2VyLmRlZi50YWJsZU5hbWU9PVwidGVtXCI/J3JlYSc6J3VsdF9yZWEnO1xyXG4gICAgICAgIHZhciBmaWx0cm9SZWE9Y29uc2lzdGlyX2ZpbHRybyhkZXBvdC5yb3cudGFyZWEsIGRlcG90LnJvd1tteVJlYUZpZWxkTmFtZV0sIGRlcG90LnJvdy5yZWEpXHJcbiAgICAgICAgcmV0dXJuIGZpbHRyb1JlYT8gbXlPd24uYWpheC5jb25zaXN0aXJfZW5jdWVzdGEoe1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIGlkX2Nhc286IGRlcG90LnJvdy5lbmNcclxuICAgICAgICB9KTogYWxlcnRQcm9taXNlKCdMYSBlbmN1ZXN0YSBkZWJlIHRlbmVyIGRhdG8gZW4gcmVhIHBhcmEgcG9kZXIgY29uc2lzdGlybGEuJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXI9ZnVuY3Rpb24ocmVzdWx0LCBkaXZSZXN1bHQpe1xyXG4gICAgaWYocmVzdWx0LnJvd3MubGVuZ3RoKXtcclxuICAgICAgICB2YXIgY3VycmVudFRva2VuOnN0cmluZ3xudWxsID0gbnVsbFxyXG4gICAgICAgIHZhciBucm9DYXJnYSA9IDA7XHJcbiAgICAgICAgdmFyIGVuY3Vlc3Rhc0RpdjogbnVsbHxIVE1MRGl2RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwuaDIoJ29wZXJhdGl2bzogJyArIHJlc3VsdC5vcGVyYXRpdm8pLmNyZWF0ZSgpKTtcclxuICAgICAgICByZXN1bHQucm93cy5mb3JFYWNoKChlbmN1ZXN0YSk9PntcclxuICAgICAgICAgICAgaWYoY3VycmVudFRva2VuICE9IGVuY3Vlc3RhLmNhcmdhZG9fZG0pe1xyXG4gICAgICAgICAgICAgICAgbnJvQ2FyZ2ErKztcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IGVuY3Vlc3RhLmNhcmdhZG9fZG07XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5oNCgnY2FyZ2EgTsK6ICcgKyBucm9DYXJnYS50b1N0cmluZygpKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICBlbmN1ZXN0YXNEaXYgPSBodG1sLmRpdih7Y2xhc3M6J2VuY3Vlc3Rhcy1hLWJsYW5xdWVhcid9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vbGFzIGNvcGlvIGNvbiBsZXQgcGFyYSBxdWUgdG9tZSBlbCB2YWxvciBhY3R1YWwgeSBubyBlbCDDumx0aW1vXHJcbiAgICAgICAgICAgICAgICBsZXQgbWlUb2tlbiA9IGN1cnJlbnRUb2tlbjtcclxuICAgICAgICAgICAgICAgIGxldCBtaU5yb0NhcmdhID0gbnJvQ2FyZ2E7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOmBib3Rvbi1ibGFucXVlYXItZG0gYm90b24tYWNjaW9uYFxyXG4gICAgICAgICAgICAgICAgfSwgJ2JsYW5xdWVhciBjYXJnYSAnICsgbnJvQ2FyZ2EudG9TdHJpbmcoKSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBidXR0b24ub25jbGljayA9IGFzeW5jICgpPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHtjbGFzczonZGFuZ2VyJ30sIFtgRXN0w6EgcG9yIGJsYW5xdWVhciBsYSBjYXJnYSAke21pTnJvQ2FyZ2F9LiBObyBzZSBwb2Ryw6EgZGVzY2FyZ2FyIGVsIGRpc3Bvc2l0aXZvLmBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0Rm9yemFyID0gaHRtbC5pbnB1dCh7Y2xhc3M6J2lucHV0LWZvcnphcid9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoWydTZSBwdWVkZSBmb3J6YXIgZWwgYmxhbnF1ZW8gJyxpbnB1dEZvcnphcl0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3J6YXIgPSBhd2FpdCBjb25maXJtUHJvbWlzZShtYWluRGl2LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDpmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uc0RlZjpbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGFiZWw6J2ZvcnphciBibGFucXVlbycsIHZhbHVlOnRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsOidjYW5jZWxhciBibGFucXVlbycsIHZhbHVlOmZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZm9yemFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXRGb3J6YXIudmFsdWU9PSdmb3J6YXInKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4LmRtX2JsYW5xdWVhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcmVzdWx0Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IG1pVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MPScnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEJsYW5xdWVvLmZvckVhY2goKHR0OmFueSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3Bhbih7fSxgJHt0dC5yZXN1bHRfYmxhbnF1ZW99YCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZSgnc2kgbmVjZXNpdGEgYmxhbnF1ZWFyIGVzY3JpYmEgZm9yemFyLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoZW5jdWVzdGFzRGl2KTtcclxuICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChidXR0b24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVuY3Vlc3Rhc0Rpdj8uYXBwZW5kQ2hpbGQoaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKGBlbmN1ZXN0YTogJHtlbmN1ZXN0YS5lbmN9IGApLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKGB0YXJlYTogICR7ZW5jdWVzdGEudGFyZWF9IGApLFxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBwcmV2aXN1YWxpemFyRW5jdWVzdGEgPSAoXHJcbiAgICByZXN1bHRUZW06YW55LCBcclxuICAgIGRpdlJlc3VsdDpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICBwYXJhbXM6e1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTpzdHJpbmcsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86Ym9vbGVhblxyXG4gICAgICAgIGxhYmVsQWN0aW9uOiBzdHJpbmdcclxuICAgIH1cclxuKSA9PntcclxuICAgIGxldCB7Y2Fzb1RlbX0gPSAgcmVzdWx0VGVtO1xyXG4gICAgaWYoIWNhc29UZW0uanNvbl9lbmN1ZXN0YSl7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7aWQ6J21lbnNhamUtbm8taGF5LWpzb24tZW5jdWVzdGEnfSxgbm8gc2UgZW5jb250csOzIGluZm9ybWFjaW9uIGNhcmdhZGEgZW4gbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY31gKS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcbiAgICBpZihjYXNvVGVtLmpzb25fZW5jdWVzdGEgfHwgcGFyYW1zLmlnbm9yYUpzb25FbmN1ZXN0YVZhY2lvKXtcclxuICAgICAgICB2YXIgZW5jdWVzdGFEaXYgPSBodG1sLmRpdih7aWQ6J2JhY2t1cC1kaXYnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGVuY3Vlc3RhRGl2KTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIG15LmFncmVnYXJfanNvbihlbmN1ZXN0YURpdiwgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKTtcclxuICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7aWQ6J21lbnNhamUtZXJyb3ItanNvbi1lbmN1ZXN0YSd9LGBubyBzZSBwdWRvIGFsIHByZXZpc3VhbGl6YXIgbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY30gY29ycmVjdGFtZW50ZS4gJHtlcnIubWVzc2FnZX1gKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgICAgIGNsYXNzOmBib3Rvbi1ibGFucXVlYXItZW5jdWVzdGEtYWNjaW9uYFxyXG4gICAgICAgIH0sIGAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZW5jdWVzdGFgKS5jcmVhdGUoKTtcclxuICAgICAgICBidXR0b24ub25jbGljayA9IGFzeW5jICgpPT4ge1xyXG4gICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2Rhbmdlcid9LCBbYEVzdMOhIHBvciAke3BhcmFtcy5sYWJlbEFjdGlvbn0gbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY30uIFNlIHBlcmRlcsOhbiBsb3MgZGF0b3MgZGUgbGEgbWlzbWEuYF0pXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRGb3J6YXIgPSBodG1sLmlucHV0KHtjbGFzczonaW5wdXQtZm9yemFyJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtgcGFyYSAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZXNjcmliYSBmb3J6YXIgYCxpbnB1dEZvcnphcl0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3Q6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBidXR0b25zRGVmOltcclxuICAgICAgICAgICAgICAgICAgICB7bGFiZWw6J2ZvcnphcicsIHZhbHVlOnRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtsYWJlbDonY2FuY2VsYXInLCB2YWx1ZTpmYWxzZX1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGZvcnphcil7XHJcbiAgICAgICAgICAgICAgICBpZihpbnB1dEZvcnphci52YWx1ZT09J2Zvcnphcicpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB3YWl0R2lmID0gaHRtbC5pbWcoe3NyYzonaW1nL2xvYWRpbmcxNi5naWYnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKHdhaXRHaWYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4W3BhcmFtcy5ub21icmVQcm9jZWR1cmVdKGNhc29UZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MPXJlc3VsdEJsYW5xdWVvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0R2lmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShgc2kgbmVjZXNpdGEgJHtwYXJhbXMubGFiZWxBY3Rpb259IGVzY3JpYmEgZm9yemFyLmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0Lm1vc3RyYXJfZW5jdWVzdGFfYV9ibGFucXVlYXJfY29udGVuaWRvPWZ1bmN0aW9uKHJlc3VsdCwgZGl2UmVzdWx0KXtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTonZW5jdWVzdGFfYmxhbnF1ZWFyJyxcclxuICAgICAgICBpZ25vcmFKc29uRW5jdWVzdGFWYWNpbzogZmFsc2UsXHJcbiAgICAgICAgbGFiZWxBY3Rpb246ICdibGFucXVlYXInXHJcbiAgICB9KVxyXG59XHJcblxyXG5teU93bi53U2NyZWVucy5wcm9jLnJlc3VsdC5tb3N0cmFyX2VuY3Vlc3RhX2FfYm9ycmFyPWZ1bmN0aW9uKHJlc3VsdCwgZGl2UmVzdWx0KXtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTonZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBpZ25vcmFKc29uRW5jdWVzdGFWYWNpbzogdHJ1ZSxcclxuICAgICAgICBsYWJlbEFjdGlvbjogJ2JvcnJhcidcclxuICAgIH0pXHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLmRlbW89YXN5bmMgZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsIGdsb2JhbFxyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe21vZG9EZW1vOnRydWV9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlGbGF0PFQ+KGFycmF5czpUW11bXSk6VFtde1xyXG4gICAgcmV0dXJuIChbXSBhcyBUW10pLmNvbmNhdC5hcHBseShbXSwgYXJyYXlzKTtcclxufVxyXG4iXX0=
|
|
769
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUs3RCxrQ0FBa0M7SUFDbEMscUVBQThHO0lBQzlHLG1FQUFrSjtJQUVsSixrQkFBa0I7SUFFbEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQzdCLElBQUksaUJBQWlCLEdBQWMsSUFBSSxDQUFDO0lBRXhDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBUSxFQUFFO1FBQ3BDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNmLElBQUcsQ0FBQztZQUNBLGlCQUFpQixHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUFBLE9BQU0sR0FBRyxFQUFDLENBQUM7WUFDUixpQkFBaUIsR0FBQyxJQUFJLENBQUM7UUFDM0IsQ0FBQztRQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFDO1lBQzFCLFVBQVUsRUFBQztnQkFDUCxFQUFDLElBQUksRUFBQyxXQUFXLEVBQUcsUUFBUSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFDLFlBQVksRUFBQztnQkFDN0YsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFPLFFBQVEsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDO2dCQUN0RixFQUFDLElBQUksRUFBQyxLQUFLLEVBQVMsUUFBUSxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxFQUFDO2FBQy9EO1lBQ0QsVUFBVSxFQUFDLElBQUk7WUFDZixVQUFVLEVBQUMsQ0FBTyxNQUFNLEVBQUMsRUFBRTs7Z0JBQ3ZCLHNCQUFzQjtnQkFD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LENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0NBQXNDLEdBQUMsVUFBUyxNQUFNLEVBQUUsU0FBUztRQUN4RixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLGVBQWUsRUFBQyxvQkFBb0I7WUFDcEMsdUJBQXVCLEVBQUUsS0FBSztZQUM5QixXQUFXLEVBQUUsV0FBVztTQUMzQixDQUFDLENBQUE7SUFDTixDQUFDLENBQUE7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMseUJBQXlCLEdBQUMsVUFBUyxNQUFNLEVBQUUsU0FBUztRQUMzRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLGVBQWUsRUFBQyxpQkFBaUI7WUFDakMsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixXQUFXLEVBQUUsUUFBUTtTQUN4QixDQUFDLENBQUE7SUFDTixDQUFDLENBQUE7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksR0FBQyxVQUFlLFdBQVc7O1lBQzFDLDhDQUE4QztZQUM5QyxNQUFNLENBQUMseUJBQXlCLENBQUMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQUEsQ0FBQTtJQUVELFNBQVMsU0FBUyxDQUFJLE1BQVk7UUFDOUIsT0FBUSxFQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aHRtbH0gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0IHt0cmFlckVzdHJ1Y3R1cmF9IGZyb20gXCIuLi91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IENhc29TdGF0ZSwgIFxyXG4gICAgSWRGb3JtdWxhcmlvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRFbmMsIElkT3BlcmF0aXZvLCBJZFRhcmVhLCBFc3RhZG9BY2Npb24sIERpcmVjY2lvbkFjY2lvbixcclxuICAgIENhbXBvUGtSYWl6LCBNb2RvRE1cclxufSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7Z2V0RXN0cnVjdHVyYSwgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MsIE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWX0gZnJvbSBcIi4uL3VubG9nZ2VkL2J5cGFzcy1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHtCQUNLVVBTLCBjYXJnYXJFc3RydWN0dXJhLCBjYXJnYXJIb2phRGVSdXRhLCBHTE9WQVJfREFUT1NCWVBBU1MsIEdMT1ZBUl9FU1RSVUNUVVJBLCBHTE9WQVJfTU9ET0JZUEFTU30gZnJvbSBcIi4uL3VubG9nZ2VkL2FicmlyLWZvcm11bGFyaW9cIlxyXG5cclxuLy9UT0RPIEdFTkVSQUxJWkFSXHJcblxyXG5jb25zdCBUQVJFQV9ERUZBVUxUID0gJ2VuY3UnO1xyXG52YXIgT1BFUkFUSVZPX0RFRkFVTFQ6c3RyaW5nfG51bGw9IG51bGw7XHJcblxyXG5teU93bi5hdXRvU2V0dXBGdW5jdGlvbnMucHVzaChhc3luYyAoKT0+e1xyXG4gICAgdmFyIG15ID0gbXlPd247ICAgIFxyXG4gICAgdHJ5e1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUID0gYXdhaXQgbXkuYWpheC5vcGVyYXRpdm9fZ2V0KHt9KTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUPW51bGw7XHJcbiAgICB9XHJcbiAgICBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YT17XHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6T1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpUQVJFQV9ERUZBVUxULCByZWZlcmVuY2VzOiAndGFyZWFzJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInLCBkZWZhdWx0VmFsdWU6MTMwMDMxfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKHBhcmFtcyk9PntcclxuICAgICAgICAgICAgLy8gYW50ZXM6IGFicmlyRGlyZWN0b1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgZW5jLCB0YXJlYX0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHZhciBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgICAgICAgICB2YXIgY2FyZ2EgPSBhd2FpdCBteS5hamF4LmRtX2ZvcnBrcmFpel9jYXJnYXIoe29wZXJhdGl2bywgcGtfcmFpel92YWx1ZTplbmMsIHRhcmVhfSkgYXMgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXM7XHJcbiAgICAgICAgICAgIGlmKCFlc3RydWN0dXJhIHx8IChlc3RydWN0dXJhLnRpbWVzdGFtcD8/MCkgPCBjYXJnYS50aW1lc3RhbXBFc3RydWN0dXJhISB8fCBlc3RydWN0dXJhLm9wZXJhdGl2byAhPSBvcGVyYXRpdm8gfHwgbXkuY29uZmlnLmNvbmZpZy5kZXZlbCl7XHJcbiAgICAgICAgICAgICAgICBlc3RydWN0dXJhID0gYXdhaXQgdHJhZXJFc3RydWN0dXJhKHtvcGVyYXRpdm99KVxyXG4gICAgICAgICAgICAgICAgY2FyZ2FyRXN0cnVjdHVyYShlc3RydWN0dXJhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgICAgdmFyIHN0YXRlOkNhc29TdGF0ZSA9IHt9XHJcbiAgICAgICAgICAgIGluaWNpYWxpemFyU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0ge2Zvcm11bGFyaW86Y2FyZ2EuaW5mb3JtYWNpb25IZHJbZW5jIGFzIElkRW5jXS50YXJlYS5tYWluX2Zvcm0sIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOmVuY307XHJcbiAgICAgICAgICAgIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3NFbkJhc2VEZURhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocGVyc2lzdGVudGVzLnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXN0w6EgaW50ZW50YW5kbyBtb2RpZmljYXIgdW5hIGVuY3Vlc3RhIGFiaWVydGEgY29tbyBzb2xvIGxlY3R1cmEsIG5vIHNlIGd1YXJkYXJvbiBsb3MgY2FtYmlvc1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIoe29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYoIWNhcmdhLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWwgYXMgQ2FtcG9Qa1JhaXpdXSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNlIGVuY3VlbnRyYSBlbC9sYSAke2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbH0gJHtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXJnYXJIb2phRGVSdXRhKHsuLi5jYXJnYSwgbW9kb0FsbWFjZW5hbWllbnRvOidzZXNzaW9uJ30pO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe29wZXJhdGl2bywgbW9kb0RlbW86ZmFsc2UsIGZvclBrUmFpen0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBteU93bi53U2NyZWVucy5vYnRlbmVyX3RlbGVmb25vPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChfcGFyYW1zKT0+e1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYX0gPSB7b3BlcmF0aXZvOiBPUEVSQVRJVk9fREVGQVVMVCwgdGFyZWE6IFRBUkVBX0RFRkFVTFR9O1xyXG4gICAgICAgICAgICBsZXQgZW5jID0gcGFyc2VJbnQoYXdhaXQgbXkuYWpheC5nZXRfcmFuZG9tX2ZyZWVfY2FzZSh7b3BlcmF0aXZvfSkpOyBcclxuICAgICAgICAgICAgYXdhaXQgbXlPd24ud1NjcmVlbnMuYWJyaXJfZW5jdWVzdGEubWFpbkFjdGlvbih7b3BlcmF0aXZvLCBlbmMsIHRhcmVhfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLmNvbnNpc3Rpcl9lbmN1ZXN0YT17XHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6T1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAsIHR5cGVOYW1lOidpbnRlZ2VyJ31cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChwYXJhbXMpPT57XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpblRvcEJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXRvcC1iYXInKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYWluVG9wQmFyKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5Ub3BCYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgdGFyZWEsIGVuYyB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgbXlPd24uYWpheC5jb25zaXN0aXJfZW5jdWVzdGEoe1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBlbmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRGaWVsZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ29wZXJhdGl2bycsIHZhbHVlOiBvcGVyYXRpdm99KTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ3ZpdmllbmRhJywgdmFsdWU6IGVuY30pO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2R3JpbGxhID0gaHRtbC5kaXYoe2lkOidpbmNvbnNpc3RlbmNpYXMnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZHcmlsbGEsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2Qm90b25lcyA9IGh0bWwuZGl2KHtpZDonYm90b25lcy1wb3N0LWNvbnNpc3Rpcid9LFtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhckJvdG9uQ2VycmFyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBjZXJyYXIgZW5jdWVzdGFgXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZvbHZlciBhIGVuY3Vlc3RhICR7ZW5jfWBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgbWFpbkxheW91dC5pbnNlcnRCZWZvcmUoZGl2Qm90b25lcywgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIG15LnRhYmxlR3JpZChcImluY29uc2lzdGVuY2lhc19jdW1wbGVuX2NvbmRpY2lvblwiLCBkaXZHcmlsbGEse3RhYmxlRGVmOnt9LGZpeGVkRmllbGRzOiBmaXhlZEZpZWxkc30pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuXHJcbi8vcXVpdGEgYm9vdHN0cmFwIGRlbCBoZWFkIHBhcmEgcXVlIG5vIHJvbXBhIGxvcyBlc3RpbG9zIGRlIEJFUGx1cyAoc29sbyBzZSB1c2EgYm9vdHN0cmFwIGVuIGVsIGZvcm0pXHJcbnZhciBsaW5rTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tocmVmPVwiY3NzL2Jvb3RzdHJhcC5taW4uY3NzXCJdJyk7XHJcbmxpbmtOb2RlWzBdPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZVswXSk7XHJcblxyXG5mdW5jdGlvbiBjb25zaXN0aXJfZmlsdHJvKHRhcmVhLCByZWFfdGVtLCByZWEpe1xyXG4gICAgcmV0dXJuIHRhcmVhP3JlYV90ZW06cmVhO1xyXG59O1xyXG5cclxudmFyIHRhcmVhczphbnkgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gaHRtbE51bWVybyhudW06bnVtYmVyKXtcclxuICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOidudW1lcm8nfSwnJysobnVtPz8nJykpXHJcbn1cclxuXHJcbnZhciBwZXJzaXN0aXJFbk1lbW9yaWEgPSBhc3luYyAocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSA9PiB7XHJcbiAgICB2YXIge21vZG9BbG1hY2VuYW1pZW50b30gPSBwZXJzaXN0ZW50ZXNcclxuICAgICAgICBpZihtb2RvQWxtYWNlbmFtaWVudG89PSdsb2NhbCcpe1xyXG4gICAgICAgICAgICBteS5zZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9XHJcbiAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfTU9ET0JZUEFTUywgbW9kb0FsbWFjZW5hbWllbnRvKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzaW5jcm9uaXphckRhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlc3xudWxsLCBjYW1iaWFNb2RvRE06Ym9vbGVhbil7XHJcbiAgICBjb25zdCBtb2RvRG1EZWZlY3RvID0gYXdhaXQgbXkuYWpheC5tb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcih7fSk7XHJcbiAgICBsZXQgbW9kb0RNOiBNb2RvRE0gPSBteS5nZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVkpIHx8IG1vZG9EbURlZmVjdG87XHJcbiAgICBteS5zZXRMb2NhbFZhcihNT0RPX0RNX0xPQ0FMU1RPUkFHRV9LRVksIG1vZG9ETSk7XHJcbiAgICB2YXIgZGF0b3MgPSBhd2FpdCBteS5hamF4LmRtX3NpbmNyb25pemFyKHtwZXJzaXN0ZW50ZXMsIG1vZG9fZG06bW9kb0RNLCBjYW1iaWFfbW9kb19kbTpjYW1iaWFNb2RvRE19KTtcclxuICAgIHZhciBvcGVyYXRpdm8gPSBkYXRvcy5vcGVyYXRpdm87XHJcbiAgICBwZXJzaXN0aXJFbk1lbW9yaWEoey4uLmRhdG9zLCBtb2RvQWxtYWNlbmFtaWVudG86J2xvY2FsJ30pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoe29wZXJhdGl2b30pXHJcbiAgICBteS5zZXRMb2NhbFZhcihHTE9WQVJfRVNUUlVDVFVSQSwgZXN0cnVjdHVyYSk7XHJcbiAgICBteS5yZW1vdmVMb2NhbFZhcihCQUNLVVBTKTtcclxuICAgIHJldHVybiBkYXRvcztcclxufVxyXG5cclxuXHJcblxyXG52YXIgbW9zdHJhckluZm9Mb2NhbCA9IChkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudCwgdGl0dWxvOnN0cmluZywgbnJvU2luY3JvOm51bWJlcnxudWxsLCBtb3N0cmFyTGlua0hkcjogYm9vbGVhbik9PntcclxuICAgIGxldCBkYXRvc0J5UGFzcyA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUyk7XHJcbiAgICBsZXQgZXN0cnVjdHVyYSA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9FU1RSVUNUVVJBKTtcclxuICAgIGlmKGRhdG9zQnlQYXNzKXtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmQoaHRtbC5kaXYoe2lkOidhdmlzby1zaW5jcm8nfSwgW1xyXG4gICAgICAgICAgICBucm9TaW5jcm8/aHRtbC5wKFtcIk7Dum1lcm8gZGUgc2luY3Jvbml6YWNpw7NuOiBcIiwgaHRtbC5iKFwiXCIrbnJvU2luY3JvLnRvU3RyaW5nKCkpXSk6bnVsbCxcclxuICAgICAgICAgICAgaHRtbC5oNCh0aXR1bG8pLFxyXG4gICAgICAgICAgICBodG1sLnAoW2h0bWxOdW1lcm8obGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykuYXJyYXkoKS5sZW5ndGgpLCcgYXJlYXM6ICcsbGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyldKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXSkuYXJyYXkoKS5sZW5ndGgpLCAnICcgKyBlc3RydWN0dXJhLnVhUHBhbF0pLFxyXG4gICAgICAgICAgICBtb3N0cmFyTGlua0hkcj9odG1sLmEoe2hyZWY6Jy4vY2FtcG8nfSxbaHRtbC5iKCdJUiBBIExBIEhPSkEgREUgUlVUQScpXSk6bnVsbFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdkF2aXNvU2luY3JvLmFwcGVuZENoaWxkKGh0bWwuZGl2KHtjbGFzczonYXZpc28nfSxbXHJcbiAgICAgICAgICAgIGh0bWwuaDQoJ1Npc3RlbWEgdmFjw61vJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSBmb3JtdWxhcmlvcycpLFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgbW9zdHJhckluZm9Nb2RvID0gYXN5bmMobWFpbkxheW91dDpIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgbW9kb0RtRGVmZWN0byA9IGF3YWl0IG15LmFqYXgubW9kb19kbV9kZWZlY3RvX29idGVuZXIoe30pO1xyXG4gICAgbGV0IG1vZG9ETTogTW9kb0RNID0gbXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKSB8fCBtb2RvRG1EZWZlY3RvO1xyXG4gICAgbXkuc2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZLCBtb2RvRE0pO1xyXG4gICAgdmFyIGRpdkF2aXNvTW9kbzpIVE1MRGl2RWxlbWVudD1odG1sLmRpdihbXHJcbiAgICAgICAgaHRtbC5kaXYoYG1vZG8gYWN0dWFsOiAke21vZG9ETX0uYClcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb01vZG8pXHJcbiAgICByZXR1cm4gbW9kb0RNO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW1iaWFyTW9kb0RNRW5Mb2NhbFN0b3JhZ2UobW9kb0FjdHVhbDpNb2RvRE0pe1xyXG4gICAgbW9kb0FjdHVhbCA9IG1vZG9BY3R1YWw9PSdwcm9kdWMnPydjYXBhJzoncHJvZHVjJztcclxuICAgIG15LnNldExvY2FsVmFyKE1PRE9fRE1fTE9DQUxTVE9SQUdFX0tFWSxtb2RvQWN0dWFsKTtcclxufVxyXG5cclxudmFyIHByb2NlZGVyU2luY3JvRnVuID0gYXN5bmMgKGJ1dHRvbjpIVE1MQnV0dG9uRWxlbWVudCwgZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQsIGNhbWJpYU1vZG9ETTpib29sZWFuKT0+e1xyXG4gICAgYnV0dG9uLmRpc2FibGVkPXRydWU7XHJcbiAgICBidXR0b24uY2xhc3NOYW1lPSdkb3dubG9hZC1kbS1idXR0b24nO1xyXG4gICAgZGl2QXZpc29TaW5jcm8uaW5uZXJIVE1MPScnO1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIHZhciBkYXRvc0J5UGFzczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUyk7XHJcbiAgICAgICAgdmFyIGRhdG9zID0gYXdhaXQgc2luY3Jvbml6YXJEYXRvcyhkYXRvc0J5UGFzcywgY2FtYmlhTW9kb0RNKTtcclxuICAgICAgICBjb25zdCBtb2RvRG1EZWZlY3RvID0gYXdhaXQgbXkuYWpheC5tb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcih7fSk7XHJcbiAgICAgICAgbGV0IG1vZG9ETUFjdHVhbDogTW9kb0RNID0gbXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKSB8fCBtb2RvRG1EZWZlY3RvO1xyXG4gICAgICAgIGlmKGNhbWJpYU1vZG9ETSl7XHJcbiAgICAgICAgICAgIGNhbWJpYXJNb2RvRE1FbkxvY2FsU3RvcmFnZShtb2RvRE1BY3R1YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtb3N0cmFySW5mb0xvY2FsKGRpdkF2aXNvU2luY3JvLCAnZGF0b3MgcmVjaWJpZG9zJywgZGF0b3MubnVtX3NpbmNybywgdHJ1ZSlcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICB0aHJvdyBlcnJcclxuICAgIH1maW5hbGx5e1xyXG4gICAgICAgIGJ1dHRvbi5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICBidXR0b24uY2xhc3NOYW1lPSdkb3dubG9hZC1kbS1idXR0b24tY29udCc7XHJcbiAgICB9XHJcbn1cclxubXlPd24ud1NjcmVlbnMuc2luY3Jvbml6YXJfZG09YXN5bmMgZnVuY3Rpb24oKXtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgYXdhaXQgbW9zdHJhckluZm9Nb2RvKG1haW5MYXlvdXQpO1xyXG4gICAgdmFyIHByb2NlZGVyQnV0dG9uID0gaHRtbC5idXR0b24oe2NsYXNzOidkb3dubG9hZC1kbS1idXR0b24tY29udCd9LCdwcm9jZWRlciDih5InKS5jcmVhdGUoKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudD1odG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCAnaW5mb3JtYWNpw7NuIGEgdHJhbnNtaXRpcicsIG51bGwsIGZhbHNlKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChwcm9jZWRlckJ1dHRvbik7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvU2luY3JvKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLm9uY2xpY2sgPSAoKT0+cHJvY2VkZXJTaW5jcm9GdW4ocHJvY2VkZXJCdXR0b24sIGRpdkF2aXNvU2luY3JvLCBmYWxzZSlcclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLmNhbWJpYXJfbW9kb19kbT1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICBjb25zdCBtb2RvRE0gPSBhd2FpdCBtb3N0cmFySW5mb01vZG8obWFpbkxheW91dCk7XHJcbiAgICB2YXIgcHJvY2VkZXJCdXR0b24gPSBodG1sLmJ1dHRvbih7Y2xhc3M6J2NhbWJpYXItbW9kby1kbS1idXR0b24nfSxgY2FtYmlhciBhIG1vZG8gJHttb2RvRE0gPT0gJ3Byb2R1Yyc/J2NhcGEnOidwcm9kdWMnfSDih5JgKS5jcmVhdGUoKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudD1odG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCBgaW5mb3JtYWNpw7NuIG1vZG8gXCIke21vZG9ETX1cIiBhIHRyYW5zbWl0aXJgLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gYXN5bmMgKCk9PntcclxuICAgICAgICBhd2FpdCBwcm9jZWRlclNpbmNyb0Z1bihwcm9jZWRlckJ1dHRvbiwgZGl2QXZpc29TaW5jcm8sIHRydWUpO1xyXG4gICAgICAgIG1haW5MYXlvdXQuaW5uZXJIVE1MPScnO1xyXG4gICAgICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGh0bWwuZGl2KGBNT0RPICR7bXkuZ2V0TG9jYWxWYXIoTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZKX0gQUNUSVZBRE9gKS5jcmVhdGUoKVxyXG4gICAgICAgIClcclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGluaWNpYWxpemFyU3RhdGUoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgc3RhdGUubW9kbyA9IHtcclxuICAgICAgICBkZW1vOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIC8vIE9KTyBzdGF0ZS5vcGNpb25lcyBzZSBtb2RpZmljYSBhY8OhIHkgZW4gb3RybyBsYWRvIGNvbiBlc3RlIG1pc21vIGNhcnRlbFxyXG4gICAgc3RhdGUub3BjaW9uZXMgPSB7XHJcbiAgICAgICAgYmllbnZlbmlkbzogdHJ1ZSxcclxuICAgICAgICBmb3JQazogbnVsbCxcclxuICAgICAgICBwaWxhRm9yUGs6IFtdLFxyXG4gICAgICAgIG1vZG9EZXNwbGllZ3VlOiBcInJlbGV2YW1pZW50b1wiLFxyXG4gICAgICAgIG1vZG9EaXJlY3RvOiBmYWxzZSxcclxuICAgICAgICBtb2RvQm9ycmFyUmVzcHVlc3RhOiBudWxsLFxyXG4gICAgICAgIGNvbkNhbXBvT3BjaW9uZXM6IGZhbHNlLFxyXG4gICAgICAgIHNhbHRvQXV0b21hdGljbzogdHJ1ZSxcclxuICAgIH07XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIHN0YXRlLmZlZWRiYWNrUm93VmFsaWRhdG9yID0ge307XHJcbn1cclxuLypcclxuZnVuY3Rpb24gbW9zdHJhckRhdG9zUGVyc29uYShoYXlEYXRvczpib29sZWFuLCBkYXRvczphbnksIGRpdlJlc3VsdDpIVE1MRGl2RWxlbWVudCl7XHJcbiAgICAvL1RPRE86IEVWQUxVQVIgU0kgQ09OVklFTkUgVFJBRVJMTyBERSBMQSBCQVNFXHJcbiAgICB2YXIgdGlwb3NEb2N1bWVudG8gPSBbJ0ROSSBhcmdlbnRpbm8nLCAnRG9jdW1lbnRvIGV4dHJhbmplcm8nLCAnTm8gdGllbmUgZG9jdW1lbnRvJywgJ090cm8nXTtcclxuICAgIHZhciBwYWlzRG9jdW1lbnRvID0gWydVcnVndWF5JywgJ1BhcmFndWF5JywgJ0JyYXNpbCcsICdCb2xpdmlhJywgJ0NoaWxlJywgJ1BlcsO6JywgJ1ZlbmV6dWVsYScsICdPdHJvJ107XHJcbiAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgaGF5RGF0b3M/XHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHtjbGFzczonZGF0b3MtcGVyc29uYS1jYXJnYWRhJ30sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5oMihcIkRhdG9zIHBlcnNvbmFcIiksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2ZpY2hhLXBlcnNvbmEnfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW2h0bWwubGFiZWwoJ0FwZWxsaWRvOiAnKSwgZGF0b3MuYXBlbGxpZG9dKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbaHRtbC5sYWJlbCgnTm9tYnJlczogJyksIGRhdG9zLm5vbWJyZXNdKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmxhYmVsKCdUaXBvIGRvY3VtZW50bzogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwb3NEb2N1bWVudG9bZGF0b3MudGlwb0RvY3VtZW50by0xXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTQgJiYgZGF0b3MudGlwb0RvY3VtZW50b0VzcGVjaWZpY2Fkbz8nICgnKyBkYXRvcy50aXBvRG9jdW1lbnRvRXNwZWNpZmljYWRvKycpJzonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTIgJiYgZGF0b3MucGFpc0RvY3VtZW50bz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5sYWJlbCgnUGFpczogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpc0RvY3VtZW50b1tkYXRvcy5wYWlzRG9jdW1lbnRvLTFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0b3MucGFpc0RvY3VtZW50bz09OCAmJiBkYXRvcy5wYWlzRG9jdW1lbnRvRXNwZWNpZmljYWRvPycgKCcrZGF0b3MucGFpc0RvY3VtZW50b0VzcGVjaWZpY2FkbysnKSc6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvIT0zICYmIGRhdG9zLnRpcG9Eb2N1bWVudG8/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ07CuiBEb2N1bWVudG86ICcpLCBkYXRvcy5kb2N1bWVudG9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5jZWx1bGFyP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdDZWwuOiAnKSwgZGF0b3MuY2VsdWxhcl0pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLmVtYWlsP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdFbWFpbDogJyksIGRhdG9zLmVtYWlsXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGVsZWZvbm9BbHRlcm5hdGl2bz9odG1sLmRpdihbaHRtbC5sYWJlbCgnVGVsLiBhbHRlcm5hdGl2bzogJyksIGRhdG9zLnRlbGVmb25vQWx0ZXJuYXRpdm9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5vYnNlcnZhY2lvbmVzP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdPYnNlcnZhY2lvbmVzOiAnKSwgZGF0b3Mub2JzZXJ2YWNpb25lc10pOicnLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICA6XHJcbiAgICAgICAgICAgIGh0bWwucChcIk5vIHNlIGVuY29udHLDsyB1bmEgZW5jdWVzdGEgcGFyYSBsYSBldGlxdWV0YSBjYXJnYWRhXCIpLmNyZWF0ZSgpXHJcbiAgICApXHJcbn1cclxuKi9cclxuLypteU93bi5jbGllbnRTaWRlcy50YXJlYXNUZW1Sb3c9e1xyXG4gICAgdXBkYXRlOihkZXBvdCk9PntcclxuICAgICAgICB2YXIgdGFyZWE6J25hZGEnfCdwcmVhc2lnbmFyJ3wnY2FyZ2FyJ3wncmVhbGl6YXInfCd2ZXJpZmljYXInPSduYWRhJztcclxuICAgICAgICB2YXIgcm93PWRlcG90LnJvdztcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgdmFyIGlkcGVyPW15LmNvbmZpZy5pZHBlcjtcclxuICAgICAgICB2YXIgZXNwZXJhcjpib29sZWFuPWZhbHNlO1xyXG4gICAgICAgIGlmKHJvdy5oYWJpbGl0YWRhKXtcclxuICAgICAgICAgICAgaWYoIXJvdy5yZWNlcGNpb25pc3RhICYmICFyb3cuYXNpZ25hZG8pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3ByZWFzaWduYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj10cnVlO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LmFzaWduYWRvIHx8ICFyb3cuZmVjaGFfYXNpZ25hY2lvbiB8fCAhcm93Lm9wZXJhY2lvbil7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0nY2FyZ2FyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9cm93LnJlY2VwY2lvbmlzdGEhPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnJlYSl7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0ncmVhbGl6YXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cuYXNpZ25hZG8hPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnZlcmlmaWNhZG8pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3ZlcmlmaWNhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5yZWNlcGNpb25pc3RhIT1pZHBlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9uZXI9e1xyXG4gICAgICAgICAgICByZWNlcGNpb25pc3RhICAgICAgICAgIDp0YXJlYT09J3ByZWFzaWduYXInICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIGFzaWduYWRvICAgICAgICAgICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBmZWNoYV9hc2lnbmFjaW9uICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgb3BlcmFjaW9uICAgICAgICAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIGNhcmdhX29ic2VydmFjaW9uZXM6KHRhcmVhPT0nY2FyZ2FyJyAgICAgfHwgdGFyZWE9PSdyZWFsaXphcicgJiYgIXJvdy5jYXJnYWRvICYmICFyb3cucmVhICkgJiYgcm93LnJlY2VwY2lvbmlzdGE9PWlkcGVyICYmICdvcHRhdGl2bycsXHJcbiAgICAgICAgICAgIHZlcmlmaWNhZG8gICAgICAgICA6dGFyZWE9PSd2ZXJpZmljYXInICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBvYnNfdmVyaWZpY2FkbyAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidvcHRhdGl2bycpLFxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIocG9uZXIpLmZvckVhY2goKHZhbG9yLCBjYW1wbyk9PntcclxuICAgICAgICAgICAgaWYoIXZhbG9yKXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5yZW1vdmVBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbY2FtcG9dLnNldEF0dHJpYnV0ZSgnbXktbWFuZGF0b3J5Jyx2YWxvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uKCl7fVxyXG59XHJcbiovXHJcblxyXG52YXIgY3JlYXJCb3RvbkNlcnJhckVuY3Vlc3RhID0gKGxhYmVsOnN0cmluZyk9PntcclxuICAgIGxldCBwYXRoID0gXCJNMyAzdjE4aDE4VjNIM3ptMTQgMTIuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5elwiO1xyXG4gICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHtjbGFzczpcInN2Zy1jZXJyYXItZW5jdWVzdGFcIn0sW1xyXG4gICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgIGQ6cGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsXCIwIDAgMjYgMjZcIik7XHJcbiAgICBsZXQgdmVyID0gaHRtbC5idXR0b24oe2lkOidib3Rvbi1jZXJyYXItZW5jdWVzdGEnfSxbc3ZnLCBsYWJlbF0pLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IGNsb3NlKCk7XHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbmNvbnN0IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhID0gKHVybDpzdHJpbmcpPT57XHJcbiAgICBjb25zdCBBQlJJUl9UQUIgPSBcIl9hYnJpclwiO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBBQlJJUl9UQUIpO1xyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOklkT3BlcmF0aXZvLHRhcmVhOklkVGFyZWEsZW5jdWVzdGE6bnVtYmVyLCBsYWJlbDpzdHJpbmcpPT57XHJcbiAgICB2YXIgdXAgPSB7XHJcbiAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTp0YXJlYSxcclxuICAgICAgICBlbmM6ZW5jdWVzdGFcclxuICAgIH1cclxuICAgIGxldCB2ZXIgPSBodG1sLmJ1dHRvbih7aWQ6J2JvdG9uLXZvbHZlci1hLWVuY3Vlc3RhJ30sbGFiZWwpLmNyZWF0ZSgpO1xyXG4gICAgdmVyLm9uY2xpY2sgPSAoKT0+IGFicmlyRW5jdWVzdGFFblBlc3Rhbm5pYURlZGljYWRhKGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yK2B3PWFicmlyX2VuY3Vlc3RhJnVwPSR7SlNPTi5zdHJpbmdpZnkodXApfSZhdXRvcHJvY2VkPXRydWVgKVxyXG4gICAgcmV0dXJuIHZlclxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMgPSBhc3luYyAoZGVwb3Q6bXlPd24uRGVwb3QsIGZpZWxkTmFtZTpzdHJpbmcsIGxhYmVsOidhYnJpcid8J3ZlcicpPT57XHJcbiAgICB0YXJlYXMgPSB0YXJlYXM/dGFyZWFzOihhd2FpdCBteU93bi5hamF4LnRhYmxlX2RhdGEoe3RhYmxlOiBgdGFyZWFzYCwgZml4ZWRGaWVsZHM6W119KSk7XHJcbiAgICB2YXIgbWlzVGFyZWFzID0gdGFyZWFzLmZpbHRlcigodGFyZWEpPT5cclxuICAgICAgICAhIXRhcmVhLm1haW5fZm9ybSAmJiB0YXJlYS5vcGVyYXRpdm89PWRlcG90LnJvdy5vcGVyYXRpdm8gJiYgKGRlcG90Lm1hbmFnZXIuZGVmLm11ZXN0cmFBYnJpckVuVG9kYXNMYXNUYXJlYXM/dHJ1ZTpkZXBvdC5yb3cudGFyZWEgPT0gdGFyZWEudGFyZWEpXHJcbiAgICApO1xyXG4gICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5pbm5lckhUTUw9Jyc7XHJcbiAgICBtaXNUYXJlYXMuZm9yRWFjaCgodGFyZWE6e3RhcmVhOnN0cmluZywgbm9tYnJlOnN0cmluZywgbWFpbl9mb3JtOklkRm9ybXVsYXJpb30pPT57XHJcbiAgICAgICAgbGV0IGJ1dHRvbkxhYmVsID0gYCR7bGFiZWx9ICR7dGFyZWEudGFyZWF9YDtcclxuICAgICAgICBsZXQgdmVyID0gY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEoXHJcbiAgICAgICAgICAgIGRlcG90LnJvdy5vcGVyYXRpdm8gYXMgSWRPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIHRhcmVhLnRhcmVhIGFzIElkVGFyZWEsIFxyXG4gICAgICAgICAgICBOdW1iZXIoZGVwb3Qucm93LmVuYyksXHJcbiAgICAgICAgICAgIGJ1dHRvbkxhYmVsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB2ZXIuc3R5bGU9J21hcmdpbjowcHggMnB4Oyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZCh2ZXIpO1xyXG4gICAgfSlcclxufVxyXG5cclxudmFyIGdldEFicmlyT3ZlciA9IChfZGVwb3Q6bXlPd24uRGVwb3QsX2ZpZWxkTmFtZTpzdHJpbmcpOidhYnJpcic9PidhYnJpcidcclxuICAgIC8vXHJcbiAgICAvKihkZXBvdC5yb3cuY2FyZ2Fkb19kbSB8fCAhZGVwb3Qucm93Wydlc3RhZG9zX19wZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSddICYmIGRlcG90LnJvdy5hc2lnbmFkbyAhPSBteS5jb25maWcuaWRwZXIpP1xyXG4gICAgICAgICd2ZXInOidhYnJpcidcclxuICAgICovXHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXI9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWJyaXJSZWNlcGNpb249e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbGFiZWw6J3Zlcid8J2FicmlyJyA9IGdldEFicmlyT3ZlcihkZXBvdCxmaWVsZE5hbWUpO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMudmVySWNvbm9Tdmc9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBpZihkZXBvdC5yb3cucGF0aF9pY29ub19zdmcpe1xyXG4gICAgICAgICAgICB2YXIgc3ZnID0gaHRtbC5zdmcoe1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6XCJzdmctYWNjaW9uZXNcIlxyXG4gICAgICAgICAgICB9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZDpkZXBvdC5yb3cucGF0aF9pY29ub19zdmdcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChzdmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbnZhciBjcmVhclNWRyA9IChwYXRoOnN0cmluZyxwcm9wczphbnkpID0+IHtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyhwcm9wcyB8fCB7fSxbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDpwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixcIjAgMCA1MCA1MFwiKTtcclxuICAgIHJldHVybiBzdmdcclxufVxyXG52YXIgY3JlYXJCb3RvbkFjY2lvbiA9IChkZXBvdDpteU93bi5EZXBvdCwgYWN0aW9uOkVzdGFkb0FjY2lvbik9PntcclxuICAgIGxldCAgYWNjaW9uU2luR3Vpb25lcyA9IGFjdGlvbi5lYWNjaW9uLnJlcGxhY2UoJ18nLCcgJyk7XHJcbiAgICB2YXIgc3ZnID0gY3JlYXJTVkcoYWN0aW9uLnBhdGhfaWNvbm9fc3ZnLHtjbGFzczpcInN2Zy1hY2Npb25lc1wifSlcclxuICAgIGlmKGFjdGlvbi5kZXNhY3RpdmFfYm90b24pe1xyXG4gICAgICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOmBzaW4tYm90b24tYWNjaW9uYH0sW2FjY2lvblNpbkd1aW9uZXMsIHN2ZyBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50XSkuY3JlYXRlKClcclxuICAgIH1cclxuICAgIGxldCBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgY2xhc3M6YGJvdG9uLWFjY2lvbiBib3Rvbi1hY2Npb24tJHthY3Rpb24uZWFjY2lvbl9kaXJlY2Npb259YFxyXG4gICAgfSxbXHJcbiAgICAgICAgYCR7YWNjaW9uU2luR3Vpb25lc31gLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBzdmcgZXMgaHRtbGVsZW1lbnRcclxuICAgICAgICBhY3Rpb24ucGF0aF9pY29ub19zdmc/c3ZnOm51bGwsXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCk9PiB7XHJcbiAgICAgICAgdmFyIGFjdGlvbkZ1biA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmFjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZWE6IGRlcG90LnJvdy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGljaW9uOiBhY3Rpb24uY29uZGljaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbjogYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhc1RlbVRhYmxlOiBkZXBvdC5kZWYubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3Qse3JldHJpZXZlSWdub3JpbmdXaGVyZTp0cnVlfSkgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKGFjdGlvbi5ub21icmVfd3NjcmVlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9UT0RPIGFjb21vZGFyIGVzdG8gZW4gYWxndW4gbW9tZW50b1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBkZXBvdC5yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86cGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6cGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IE51bWJlcihwYXJhbXMuZW5jKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhYnJpckVuY3Vlc3RhRW5QZXN0YW5uaWFEZWRpY2FkYShsb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWUrbXkubWVudVNlcGFyYXRvcitgdz0ke2FjdGlvbi5ub21icmVfd3NjcmVlbn0mdXA9JHtKU09OLnN0cmluZ2lmeSh1cCl9JmF1dG9wcm9jZWQ9dHJ1ZWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICAgICAgLy9yZXRyYXNvIGxhIGhhYmlsaXRhY2nDs24gcG9ycXVlIGEgdmVjZXMgdGFyZGEgZW4gcmVkaWJ1amFyc2UgbGEgYm90b25lcmEgeSBwdWVkZSB0cmFlciBwcm9ibGVtYXMgc2kgZGFuIGRvYmxlIGNsaWNrIFxyXG4gICAgICAgICAgICAgICAgLy95YSBxdWUgZWplY3V0YSBudWV2YW1lbnRlIHVuYSBhY2Npw7NuIHF1ZSB5YSBzZSBlamVjdXTDsyAoeSB0ZXJtaW7DsykgYW50ZXNcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmJ1dHRvbi5kaXNhYmxlZD1mYWxzZSwzMDAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBjb25maXJtUHJvbWlzZU9wdHM6IERpYWxvZ09wdGlvbnMgPSB7fVxyXG4gICAgICAgIGlmKGFjdGlvbi5jb25maXJtYSl7XHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlT3B0cy5hc2tGb3JOb1JlcGVhdCA9ICdubyB2b2x2ZXIgYSBtb3N0cmFyJzsgLy9tdWVzdHJhIG1lbnNhamUgcG9yIGRlZmF1bHQgcGVybyBhbmRhIGlndWFsXHJcbiAgICAgICAgICAgIHZhciBidXR0b25zRGVmID0gW1xyXG4gICAgICAgICAgICAgICAge2xhYmVsOidzw60nLCB2YWx1ZTp0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtsYWJlbDonbm8nLCB2YWx1ZTpmYWxzZX1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZShgY29uZmlybWEgYWNjacOzbiBcIiR7YWNjaW9uU2luR3Vpb25lc31cIj9gLCB7Li4uY29uZmlybVByb21pc2VPcHRzLCBidXR0b25zRGVmfSkudGhlbihhY3Rpb25GdW4pO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBhY3Rpb25GdW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnV0dG9uXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNBY2Npb25lcyA9IGFzeW5jIChvcHRzOntkZXBvdDpteU93bi5EZXBvdCwgZmllbGROYW1lOnN0cmluZywgZGlyZWNjaW9uOiBEaXJlY2Npb25BY2Npb259KT0+e1xyXG4gICAgbGV0IHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9ufSA9IG9wdHM7XHJcbiAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgdGQuaW5uZXJIVE1MPScnO1xyXG4gICAgKGRlcG90LnJvd0NvbnRyb2xzLmFjY2lvbmVzLmdldFR5cGVkVmFsdWUoKXx8W10pXHJcbiAgICAgICAgLmZpbHRlcigoYWN0aW9uOkVzdGFkb0FjY2lvbik9PmFjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbj09ZGlyZWNjaW9uKVxyXG4gICAgICAgIC5mb3JFYWNoKChhY3Rpb246RXN0YWRvQWNjaW9uKT0+dGQuYXBwZW5kQ2hpbGQoY3JlYXJCb3RvbkFjY2lvbihkZXBvdCwgYWN0aW9uKSkpO1xyXG59XHJcblxyXG52YXIgY3JlYXJTd2l0Y2ggPSAob3B0czp7cm91bmQ/OmJvb2xlYW4sIGRpc2FibGVkPzpib29sZWFuLCBjaGVja2VkPzpib29sZWFuLCBvbkNsaWNrRnVuOkZ1bmN0aW9uLCBvbkVyckZ1bj86RnVuY3Rpb259KT0+e1xyXG4gICAgdmFyIGNoZWNrYm94ID0gaHRtbC5pbnB1dCh7dHlwZTonY2hlY2tib3gnLCBjaGVja2VkOm9wdHMuY2hlY2tlZH0pLmNyZWF0ZSgpO1xyXG4gICAgY2hlY2tib3gub25jbGljayA9IGFzeW5jKCk9PntcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkPXRydWU7XHJcbiAgICAgICAgICAgIGF3YWl0IG9wdHMub25DbGlja0Z1bigpXHJcbiAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgfWZpbmFsbHl7XHJcbiAgICAgICAgICAgIGNoZWNrYm94LmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBodG1sLmxhYmVsKHtjbGFzczonc3dpdGNoJ30sW1xyXG4gICAgICAgIGNoZWNrYm94LFxyXG4gICAgICAgIGh0bWwuc3Bhbih7Y2xhc3M6YHNsaWRlciAke29wdHMucm91bmQ/J3JvdW5kJzonJ31gfSksXHJcbiAgICBdKS5jcmVhdGUoKTtcclxufVxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuaGFiaWxpdGFyPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICBjcmVhclN3aXRjaCh7XHJcbiAgICAgICAgICAgICAgICByb3VuZDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDpkZXBvdC5yb3cuaGFiaWxpdGFkYSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2tGdW46IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheC5lbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmM6IGRlcG90LnJvdy5lbmNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmdyaWQucmV0cmlldmVSb3dBbmRSZWZyZXNoKGRlcG90KSwzMDApOy8vcGFyYSBxdWUgc2UgdmVhIGVsIGVmZWN0b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0F2YW5jZT17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidhdmFuY2UnfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc1JldHJvY2Vzbz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidyZXRyb2Nlc28nfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hY2Npb25lc0JsYW5xdWVvPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoe2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb246J2JsYW5xdWVvJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gXHJcbmJvdG9uQ2xpZW50U2lkZUVuR3JpbGxhKG9wdHM6IHsgbm9tYnJlQm90b246IHN0cmluZywgbGxhbWFkYTogKGRlcG90OiBteU93bi5EZXBvdCkgPT4gUHJvbWlzZTxhbnk+IH0pIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90OiBteU93bi5EZXBvdCwgZmllbGROYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICAgICAgdmFyIGJvdG9uID0gaHRtbC5idXR0b24ob3B0cy5ub21icmVCb3RvbikuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHRkLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICAgICAgdmFyIHJlc3RhdXJhckJvdG9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYm90b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gb3B0cy5ub21icmVCb3RvbjtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBib3Rvbi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYm90b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAncHJvY2VzYW5kby4uLic7XHJcbiAgICAgICAgICAgICAgICBvcHRzLmxsYW1hZGEoZGVwb3QpLnRoZW4oYXN5bmMgZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgJ29rJyBpbiByZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXN1bHQub2spe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdyaWQucmV0cmlldmVSb3dBbmRSZWZyZXNoKGRlcG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBvdC5kZXRhaWxDb250cm9scy5pbmNvbnNpc3RlbmNpYXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcG90LmRldGFpbENvbnRyb2xzLmluY29uc2lzdGVuY2lhcy5mb3JjZURpc3BsYXlEZXRhaWxHcmlkKHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAgcmVzdWx0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi50aXRsZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjOEY4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVzdGF1cmFyQm90b24sIDI1MDApO1xyXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9pZiAoKGRlcG90LnJvdy5jb25zaXN0aWRvPT1udWxsICAmJiBkZXBvdC5yb3cucmVhIT1udWxsKSB8fCBkZXBvdC5yb3cubW9kaWZpY2FkbyE9bnVsbCAmJiBkZXBvdC5yb3cuY29uc2lzdGlkbyE9bnVsbCAmJiBkZXBvdC5yb3cubW9kaWZpY2FkbyA+ZGVwb3Qucm93LmNvbnNpc3RpZG8pe1xyXG4gICAgICAgICAgICAvLyAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9JyM4Q0YnXHJcbiAgICAgICAgICAgIC8vfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfTtcclxufVxyXG5cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmNvbnNpc3RpciA9IGJvdG9uQ2xpZW50U2lkZUVuR3JpbGxhKHtcclxuICAgIG5vbWJyZUJvdG9uOiAnY29uc2lzdGlyJyxcclxuICAgIGxsYW1hZGE6IGZ1bmN0aW9uIChkZXBvdDogbXlPd24uRGVwb3QpIHtcclxuICAgICAgICB2YXIgbXlSZWFGaWVsZE5hbWUgPSBkZXBvdC5tYW5hZ2VyLmRlZi50YWJsZU5hbWU9PVwidGVtXCI/J3JlYSc6J3VsdF9yZWEnO1xyXG4gICAgICAgIHZhciBmaWx0cm9SZWE9Y29uc2lzdGlyX2ZpbHRybyhkZXBvdC5yb3cudGFyZWEsIGRlcG90LnJvd1tteVJlYUZpZWxkTmFtZV0sIGRlcG90LnJvdy5yZWEpXHJcbiAgICAgICAgcmV0dXJuIGZpbHRyb1JlYT8gbXlPd24uYWpheC5jb25zaXN0aXJfZW5jdWVzdGEoe1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgIGlkX2Nhc286IGRlcG90LnJvdy5lbmNcclxuICAgICAgICB9KTogYWxlcnRQcm9taXNlKCdMYSBlbmN1ZXN0YSBkZWJlIHRlbmVyIGRhdG8gZW4gcmVhIHBhcmEgcG9kZXIgY29uc2lzdGlybGEuJyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxubXlPd24ud1NjcmVlbnMucHJvYy5yZXN1bHQubW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXI9ZnVuY3Rpb24ocmVzdWx0LCBkaXZSZXN1bHQpe1xyXG4gICAgaWYocmVzdWx0LnJvd3MubGVuZ3RoKXtcclxuICAgICAgICB2YXIgY3VycmVudFRva2VuOnN0cmluZ3xudWxsID0gbnVsbFxyXG4gICAgICAgIHZhciBucm9DYXJnYSA9IDA7XHJcbiAgICAgICAgdmFyIGVuY3Vlc3Rhc0RpdjogbnVsbHxIVE1MRGl2RWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwuaDIoJ29wZXJhdGl2bzogJyArIHJlc3VsdC5vcGVyYXRpdm8pLmNyZWF0ZSgpKTtcclxuICAgICAgICByZXN1bHQucm93cy5mb3JFYWNoKChlbmN1ZXN0YSk9PntcclxuICAgICAgICAgICAgaWYoY3VycmVudFRva2VuICE9IGVuY3Vlc3RhLmNhcmdhZG9fZG0pe1xyXG4gICAgICAgICAgICAgICAgbnJvQ2FyZ2ErKztcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IGVuY3Vlc3RhLmNhcmdhZG9fZG07XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoaHRtbC5oNCgnY2FyZ2EgTsK6ICcgKyBucm9DYXJnYS50b1N0cmluZygpKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICBlbmN1ZXN0YXNEaXYgPSBodG1sLmRpdih7Y2xhc3M6J2VuY3Vlc3Rhcy1hLWJsYW5xdWVhcid9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vbGFzIGNvcGlvIGNvbiBsZXQgcGFyYSBxdWUgdG9tZSBlbCB2YWxvciBhY3R1YWwgeSBubyBlbCDDumx0aW1vXHJcbiAgICAgICAgICAgICAgICBsZXQgbWlUb2tlbiA9IGN1cnJlbnRUb2tlbjtcclxuICAgICAgICAgICAgICAgIGxldCBtaU5yb0NhcmdhID0gbnJvQ2FyZ2E7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gaHRtbC5idXR0b24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOmBib3Rvbi1ibGFucXVlYXItZG0gYm90b24tYWNjaW9uYFxyXG4gICAgICAgICAgICAgICAgfSwgJ2JsYW5xdWVhciBjYXJnYSAnICsgbnJvQ2FyZ2EudG9TdHJpbmcoKSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBidXR0b24ub25jbGljayA9IGFzeW5jICgpPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYWluRGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5EaXYuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KHtjbGFzczonZGFuZ2VyJ30sIFtgRXN0w6EgcG9yIGJsYW5xdWVhciBsYSBjYXJnYSAke21pTnJvQ2FyZ2F9LiBObyBzZSBwb2Ryw6EgZGVzY2FyZ2FyIGVsIGRpc3Bvc2l0aXZvLmBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0Rm9yemFyID0gaHRtbC5pbnB1dCh7Y2xhc3M6J2lucHV0LWZvcnphcid9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoWydTZSBwdWVkZSBmb3J6YXIgZWwgYmxhbnF1ZW8gJyxpbnB1dEZvcnphcl0pXHJcbiAgICAgICAgICAgICAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3J6YXIgPSBhd2FpdCBjb25maXJtUHJvbWlzZShtYWluRGl2LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDpmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uc0RlZjpbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGFiZWw6J2ZvcnphciBibGFucXVlbycsIHZhbHVlOnRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsOidjYW5jZWxhciBibGFucXVlbycsIHZhbHVlOmZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZm9yemFyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXRGb3J6YXIudmFsdWU9PSdmb3J6YXInKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4LmRtX2JsYW5xdWVhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcmVzdWx0Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IG1pVG9rZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MPScnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEJsYW5xdWVvLmZvckVhY2goKHR0OmFueSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuc3Bhbih7fSxgJHt0dC5yZXN1bHRfYmxhbnF1ZW99YCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZSgnc2kgbmVjZXNpdGEgYmxhbnF1ZWFyIGVzY3JpYmEgZm9yemFyLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoZW5jdWVzdGFzRGl2KTtcclxuICAgICAgICAgICAgICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChidXR0b24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVuY3Vlc3Rhc0Rpdj8uYXBwZW5kQ2hpbGQoaHRtbC5kaXYoe30sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKGBlbmN1ZXN0YTogJHtlbmN1ZXN0YS5lbmN9IGApLFxyXG4gICAgICAgICAgICAgICAgaHRtbC5zcGFuKGB0YXJlYTogICR7ZW5jdWVzdGEudGFyZWF9IGApLFxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBwcmV2aXN1YWxpemFyRW5jdWVzdGEgPSAoXHJcbiAgICByZXN1bHRUZW06YW55LCBcclxuICAgIGRpdlJlc3VsdDpIVE1MRGl2RWxlbWVudCwgXHJcbiAgICBwYXJhbXM6e1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTpzdHJpbmcsXHJcbiAgICAgICAgaWdub3JhSnNvbkVuY3Vlc3RhVmFjaW86Ym9vbGVhblxyXG4gICAgICAgIGxhYmVsQWN0aW9uOiBzdHJpbmdcclxuICAgIH1cclxuKSA9PntcclxuICAgIGxldCB7Y2Fzb1RlbX0gPSAgcmVzdWx0VGVtO1xyXG4gICAgaWYoIWNhc29UZW0uanNvbl9lbmN1ZXN0YSl7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7aWQ6J21lbnNhamUtbm8taGF5LWpzb24tZW5jdWVzdGEnfSxgbm8gc2UgZW5jb250csOzIGluZm9ybWFjaW9uIGNhcmdhZGEgZW4gbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY31gKS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcbiAgICBpZihjYXNvVGVtLmpzb25fZW5jdWVzdGEgfHwgcGFyYW1zLmlnbm9yYUpzb25FbmN1ZXN0YVZhY2lvKXtcclxuICAgICAgICB2YXIgZW5jdWVzdGFEaXYgPSBodG1sLmRpdih7aWQ6J2JhY2t1cC1kaXYnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGVuY3Vlc3RhRGl2KTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIG15LmFncmVnYXJfanNvbihlbmN1ZXN0YURpdiwgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhKTtcclxuICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGh0bWwucCh7aWQ6J21lbnNhamUtZXJyb3ItanNvbi1lbmN1ZXN0YSd9LGBubyBzZSBwdWRvIGFsIHByZXZpc3VhbGl6YXIgbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY30gY29ycmVjdGFtZW50ZS4gJHtlcnIubWVzc2FnZX1gKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgICAgIGNsYXNzOmBib3Rvbi1ibGFucXVlYXItZW5jdWVzdGEtYWNjaW9uYFxyXG4gICAgICAgIH0sIGAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZW5jdWVzdGFgKS5jcmVhdGUoKTtcclxuICAgICAgICBidXR0b24ub25jbGljayA9IGFzeW5jICgpPT4ge1xyXG4gICAgICAgICAgICB2YXIgbWFpbkRpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKClcclxuICAgICAgICAgICAgbWFpbkRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHt9LFtcclxuICAgICAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2Rhbmdlcid9LCBbYEVzdMOhIHBvciAke3BhcmFtcy5sYWJlbEFjdGlvbn0gbGEgZW5jdWVzdGEgJHtjYXNvVGVtLmVuY30uIFNlIHBlcmRlcsOhbiBsb3MgZGF0b3MgZGUgbGEgbWlzbWEuYF0pXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRGb3J6YXIgPSBodG1sLmlucHV0KHtjbGFzczonaW5wdXQtZm9yemFyJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBtYWluRGl2LmFwcGVuZENoaWxkKGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtgcGFyYSAke3BhcmFtcy5sYWJlbEFjdGlvbn0gZXNjcmliYSBmb3J6YXIgYCxpbnB1dEZvcnphcl0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgICAgICAgICAgdmFyIGZvcnphciA9IGF3YWl0IGNvbmZpcm1Qcm9taXNlKG1haW5EaXYsIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3Q6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBidXR0b25zRGVmOltcclxuICAgICAgICAgICAgICAgICAgICB7bGFiZWw6J2ZvcnphcicsIHZhbHVlOnRydWV9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtsYWJlbDonY2FuY2VsYXInLCB2YWx1ZTpmYWxzZX1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKGZvcnphcil7XHJcbiAgICAgICAgICAgICAgICBpZihpbnB1dEZvcnphci52YWx1ZT09J2Zvcnphcicpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB3YWl0R2lmID0gaHRtbC5pbWcoe3NyYzonaW1nL2xvYWRpbmcxNi5naWYnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEdpZi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKHdhaXRHaWYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0QmxhbnF1ZW8gPSBhd2FpdCBteS5hamF4W3BhcmFtcy5ub21icmVQcm9jZWR1cmVdKGNhc29UZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZSZXN1bHQuaW5uZXJIVE1MPXJlc3VsdEJsYW5xdWVvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkPWZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0R2lmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShgc2kgbmVjZXNpdGEgJHtwYXJhbXMubGFiZWxBY3Rpb259IGVzY3JpYmEgZm9yemFyLmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGl2UmVzdWx0LmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByb2MucmVzdWx0Lm1vc3RyYXJfZW5jdWVzdGFfYV9ibGFucXVlYXJfY29udGVuaWRvPWZ1bmN0aW9uKHJlc3VsdCwgZGl2UmVzdWx0KXtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTonZW5jdWVzdGFfYmxhbnF1ZWFyJyxcclxuICAgICAgICBpZ25vcmFKc29uRW5jdWVzdGFWYWNpbzogZmFsc2UsXHJcbiAgICAgICAgbGFiZWxBY3Rpb246ICdibGFucXVlYXInXHJcbiAgICB9KVxyXG59XHJcblxyXG5teU93bi53U2NyZWVucy5wcm9jLnJlc3VsdC5tb3N0cmFyX2VuY3Vlc3RhX2FfYm9ycmFyPWZ1bmN0aW9uKHJlc3VsdCwgZGl2UmVzdWx0KXtcclxuICAgIHByZXZpc3VhbGl6YXJFbmN1ZXN0YShyZXN1bHQsIGRpdlJlc3VsdCwge1xyXG4gICAgICAgIG5vbWJyZVByb2NlZHVyZTonZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBpZ25vcmFKc29uRW5jdWVzdGFWYWNpbzogdHJ1ZSxcclxuICAgICAgICBsYWJlbEFjdGlvbjogJ2JvcnJhcidcclxuICAgIH0pXHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLmRlbW89YXN5bmMgZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsIGdsb2JhbFxyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe21vZG9EZW1vOnRydWV9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlGbGF0PFQ+KGFycmF5czpUW11bXSk6VFtde1xyXG4gICAgcmV0dXJuIChbXSBhcyBUW10pLmNvbmNhdC5hcHBseShbXSwgYXJyYXlzKTtcclxufVxyXG4iXX0=
|